🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 2.3 路由类 ~~~ 1. 调整目录结构 2. 路由类的作用 ~~~ ### 1. 调整目录结构 把 `route.php` 这些类放在 `/core/lib` 中。 文件:`D:\wamp\www\web.com\core\route.php` 放在 `D:\wamp\www\web.com\core\lib\route.php` 因此:我们的**命名空间也将发生变化**,一下两处修改了命名空间。 *D:\wamp\www\web.com\core\lib\route.php* ~~~ <?php namespace core\lib; class route { public function __construct() { echo "路由初始化成功"; } } ~~~ *D:\wamp\www\web.com\index.php* ~~~ // 实现自动加载 spl_autoload_register('\core\thinkphp::load'); ~~~ ### 2. 路由类的作用 以访问地址`xxx.com/index.php/index/index` 为例。 1. 隐藏index.php,变为:`xxx.com/index/index` 2. 返回对应的控制器、方法,默认为`index` 3. 获取URL参数的部分,带参数的地址:`xxx.com/index/index/id/3` #### 2.1 去除index.php 这里以Apache服务器为例。 在根目录下添加文件:`D:\wamp\www\web.com\.htaccess` ~~~ <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] </IfModule> ~~~ #### 2.2 使用超全局变量 `$_SERVER['REQUEST_URI']` 查看 `$_SERVER['REQUEST_URI']` 的值。 ![](https://box.kancloud.cn/bb1e8bcd25e14b2d271d8442c9ed8360_1366x728.png) *D:\wamp\www\web.com\core\lib\route.php* ~~~ <?php namespace core\lib; class route { public $ctrl; public $action; public function __construct() { /** * xxx.com/index.php/index/index * 1. 隐藏index.php * 2. 返回对应的控制器、方法 * 3. 获取URL参数的部分 */ if (isset($_SERVER['REQUEST_URI']) && $_SERVER['REQUEST_URI'] != '/' ) { $path = $_SERVER['REQUEST_URI']; $pathArr = explode('/', trim($path, '/')); if (isset($pathArr[0])) { $this->ctrl = $pathArr[0]; } unset($pathArr[0]); if (isset($pathArr[1])) { $this->action = $pathArr[1]; unset($pathArr[1]); } else{ $this->action = 'index'; } // 把剩余的参数信息,写入$_GET $count = count($pathArr) + 2; $i = 2; while ($i < $count) { if (isset($pathArr[$i + 1])) { $_GET[$pathArr[$i]] = $pathArr[$i + 1]; } $i += 2; } } else{ $this->ctrl = 'index'; $this->action = 'index'; } } } ~~~ #### 2.3 查看效果 在 *D:\wamp\www\web.com\core\thinkphp.php* ~~~ static public function run() { $route = new \core\lib\route(); // 打印路由对象 p($route); } ~~~ ![](https://box.kancloud.cn/709b4f611da6b5c1ead4d07f076157ac_738x314.png) 打印存储的参数信息如下: ![](https://box.kancloud.cn/9e4b1c464bb54b219c549fe16db42e86_788x409.png)