Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:真实的路由其实是隐藏真实的访问URL, 通过名称映射来实现的
路由的作用是简化URL访问地址,并根据定义的路由类型做出正确的解析。
比如在php中关于url的处理有以下2中方式:
通常的路径模式:http://网址/index.php?m=模块名称&c=控制器&a=方法
pathinfo路径模式:http://网址/index.php/模块/控制器/方法
地址这么长,我们是记不住的,这个时候我们就可以用路由去简化他的地址,并且在缩短地址的同时进行一些规则的定义。
即:获取路径信息->处理路径信息
<?php
// 首先建立控制器
class UserController
{
public function getUser($id, $name)
{
return "天空的id ==> $id, 天空的姓名 ==> $name";
}
}
// 1. 解析出PATHINFO
$pathinfo = array_values(array_filter(explode('/', $_SERVER['PATH_INFO'])));//$_SERVER[‘PATH_INFO’]是全局变量
// print_r($pathinfo);
// 2. 解析控制器
$controller = ucfirst(array_shift($pathinfo)) . 'Controller';
// 3. 解析控制器中的方法
$action = array_shift($pathinfo);//删除数组中的第一个元素,并返回被删除元素的值
// print_r($pathinfo);
// 4. 解析参数: pathinfo路径变量
// 这里放的是从pathinfo中解析出来的变量组成的数组
$params = [];
for ($i=0; $i<count($pathinfo); $i+=2) {//遍历数组
// 检查当前pathinfo变量是否有值
if (isset($pathinfo[$i+1])){
$params[$pathinfo[$i]] = $pathinfo[$i+1];
}
}
// print_r($params);
// 5. 调用控制器方法
$user = new $controller();
echo $user->$action(...array_values($params));
//http://php.edu/0514/route1.php/user/getuser/id/360/name/sky
1.使用路由可以简化访问路径。
2.开启路由的强制使用,让用户只能从服务器定义的路由进来,避免了服务器数据被修改的危险。
3.可以通过路由定义好从这个路径进来是get操作还是post操作,避免杂乱。