使用自动加载和解析url的参数,实现调用到不同的控制器,实现了pathinfo模式和普通的url模式
文件结构:
|--Controller
|--Index
|--Index.php
|--Application.php
Application.php
<?php class 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\\Index.php
<?php namespace Controller\\Index; use Service\\User; class Index{ public function __construct(){ echo \"构造方法<br/>\"; } public function index(){ new User(); print_r($_GET); } public function login(){ echo \"login()\"; } }
效果:
以上这篇PHP url的pathinfo模式加载不同控制器的简单实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持phpstudy。
本文地址:https://www.stayed.cn/item/4889
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我