Simple implementation of loading different controllers in the pathinfo mode of PHP url, urlpathinfo
The pathinfo mode and common url mode are implemented by calling different controllers by automatically loading and parsing url parameters.
File structure:
| -- Controller
| -- Index
| -- Index. php
| -- Application. php
Application. php
<?phpclass Application{ public static function main(){ header("content-type:text/html;charset=utf-8"); self::register(); self::router(); } public static function register(){ spl_autoload_register("self::loadClass"); } public static function loadClass($class){ $class=str_replace('\\', '/', $class); $class="./".$class.".php"; require_once $class; } public static function router(){ if(isset($_SERVER['PATH_INFO'])){ $pathinfo=array_filter(explode("/", $_SERVER['PATH_INFO'])); for($i=1;$i<=count($pathinfo);$i++){ $key=isset($pathinfo[$i]) ? $pathinfo[$i] : ''; $value=isset($pathinfo[$i+1]) ? $pathinfo[$i+1] :""; switch ($i) { case 1: $_GET['m']=ucfirst($key); break; case 2: $_GET['c']=ucfirst($key); break; case 3: $_GET['a']=$key; break; default: if($i>3){ if($i%2==0){ $_GET[$key]=$value; } } break; } } } $_GET['m']=!empty($_GET['m']) ? ucfirst($_GET['m']) : 'Index'; $_GET['c']=!empty($_GET['c']) ? ucfirst($_GET['c']) : 'Index'; $_GET['a']=!empty($_GET['a']) ? $_GET['a'] : 'index'; $class="\\Controller\\{$_GET['m']}\\{$_GET['c']}"; $controller=new $class; $controller->$_GET['a'](); }}Application::main();
\ Controller \ Index. php
<? Phpnamespace Controller \ Index; use Service \ User; class Index {public function _ construct () {echo "constructor <br/>" ;}public function index () {new User (); print_r ($ _ GET);} public function login () {echo "login ()";}}
Effect:
The simple implementation of loading different controllers in the pathinfo mode of the above PHP url is all the content shared by Alibaba Cloud. I hope you can give us a reference and support for our customer base.