Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:路由是欺骗的艺术, 你看到的url其实都是假的, 这就是编程的魅力
路由主要将URL中的控制器,方法解析出来,映射到对应的控制器和方法中。
通常我们会看到这样的地址http://127.0.0.1/0514/route.php/acton/del/id/10/name/admin
,这个地址我们要把它解析出来。
示例:
在浏览器地址栏输入以下http://127.0.0.1/0514/route.php/acton/del/id/10/name/admin
后台部分:
// 创建一个控制器类
class UserController
{
public function del($id, $name)
{
echo '当前路径控制器为' . __CLASS__;
echo '<hr>';
echo '当前方法为' . __FUNCTION__;
echo '<hr>';
return "id ==> $id, name ==> $name";
}
}
// 1.解析出PATHINFO
$pathinfo = array_values(array_filter(explode('/',$_SERVER['PATH_INFO'])));
// 2.解析控制器
$controller =array_shift($pathinfo).'controller';
// 3.解析控制器中的方法
$action = array_shift($pathinfo);
// 4.解析参数
parse_str($_SERVER['QUERY_STRING'],$params);
$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));
打印:
当前路径控制器为UserController
当前方法为del
id ==> 10, name ==> admin
将URL的请求优雅的对应到要执行的操作方法
通过这节课的学习,我认识到了路由的好处,只需要将路径解析好,就可以将网络请求的URL对应PHP应用层的逻辑处理地址,好处非常多。