## 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)