服务端 - PHP - 路由
一、概述
- 目标:将URL中的控制器方法解析出来,映射到对应的控制器类和方法上
二、解析查询字符串
// 1. 将控制器和方法拆分为数组
$pathinfo = array_values(array_filter(explode('/', $_SERVER["PATH_INFO"])));
// 2. 解析控制器
$controller = ucfirst(array_shift($pathinfo));
// 3. 解析方法
$action = array_shift($pathinfo);
// 4. 解析参数
parse_str($_SERVER["QUERY_STRING"], $params);
// 5. 调用控制器中的方法
$obj = new $controller;
echo $obj->$action(...array_values($params));
三、解析PATHINFO
<?php
class User {
public function getName($id, $name) {
return 'id:'.$id.'<br>'.'name:'.$name;
}
}
// 1. 将控制器和方法拆分为数组
$pathinfo = array_values(array_filter(explode('/', $_SERVER["PATH_INFO"])));
// 2. 解析控制器
$controller = ucfirst(array_shift($pathinfo));
// 3. 解析方法
$action = array_shift($pathinfo);
echo $action;
// 4. 解析参数:PATHINFO路径变量
//用来保存从pathinfo解析出来的变量
$params = [];
//i+=2使当前索引横跨1个键值,跳到下一个键
for ($i=0;$i<count($pathinfo);$i+=2) {
//检查是否有键值
if (isset($pathinfo[$i+1])) {
//解析出新数组的键和值
$params[$pathinfo[$i]] = $pathinfo[$i+1];
}
}
// 5. 调用控制器中的方法
$obj = new $controller;
echo $obj->$action(...array_values($params));
四、课程总结
- 今天学习了 PHP 的路由,通过上课认真听讲和认真完成老师布置的作业,使得我对 路由 的理解和运用更加深入和熟悉。最主要的知识点是明白和掌握了路由的原理以及路由解析的基本用法。