用代码演绎mvc pathinfo路由
解析pathinfo,从url解析控制器和方法,参数
从谷歌搜索输入url
http://chloe.io/0222/demo.php/user/index/id/2/name/jim
<?php
//api mvc 这种架构模式 url地址都会映射到控制器下面的一个具体操作方法上
namespace mvc;
class User
{
function index($id, $name)
{
return "您好$name,您的Id是$id";
}
}
// var_dump($_SERVER);
var_dump($_SERVER['PATH_INFO']);
var_dump(explode("/", $_SERVER['PATH_INFO'])); // /user/index/id/2/name/jim
//先用explode分割成数组
//用array_filte()去除空数组,用array_values()重新排数组键
$pathinfo = array_values(array_filter(explode("/", $_SERVER['PATH_INFO'])));
// var_dump($pathinfo);
//用array_shift()取出第一个字符串与命名空间拼接,为控制器
$controller = __NAMESPACE__ . '\\' . array_shift($pathinfo);
var_dump($controller);
// var_dump($pathinfo);
//用array_shift()取出字符串为方法
$method = array_shift($pathinfo);
var_dump($method);
// $params = ['id' => 1, 'name' => 'peter'];
var_dump($pathinfo);
//前提是参数是通过pathinfo方式提交过来
for ($i = 0; $i < count($pathinfo); $i += 2) {
$params[$pathinfo[$i]] = $pathinfo[$i + 1];
}
//取出参数数组
var_dump($params);
//用call_user_func_array()返回回调函数的结果
echo call_user_func_array([(new $controller), $method], $params);
//改变url的参数值,回调函数的值随之改变