mvc pathinfo 路由的解析原理
路由原理:从 url 地址中解析数据。
_GET
: 返回查询字符串拆解的数组implode()
: 将数组切割成字符串vprintf
:按照指定模板打印$_SERVER['QUERY_STRING'];
获取 url 地址的查询字符串$_SERVER['PATH_INFO'];
获取地址的 PATHINFO 变量/ 路径变量$_SERVER['REQUEST_URI'];
获取相对于当前主机名下的文件的绝对路径
演示 PATHINFO 变量解析:
<?php
// 写一个简单的控制器
class MyController
{
public function getInfor($name, $salary)
{
return "姓名: ==> $name, 工资: ==> $salary";
}
}
// https://help10086.io/0222/demo1.php/MyController/getInfor/name/srp/salary/30000
// var_dump($_SERVER['PATH_INFO']);
// array_filter去除空字符 array_values将数组重新排序
$res = array_values(array_filter(explode("/", $_SERVER['PATH_INFO'])));
echo '<pre>';
print_r($res);
$controller = array_shift($res);
// echo $controller;
$method = array_shift($res);
// echo $method;
for ($i = 0; $i < count($res); $i += 2) {
$params[$res[$i]] = $res[$i + 1];
}
echo '<pre>';
print_r($params);
// 第一种解决方法
$infor = (new MyController)->getInfor($params['name'], $params['salary']);
var_dump($infor);
// 第二种回调的解决方法
$infor = call_user_func_array([(new $controller), $method], [$params['name'], $params['salary']]);
echo $infor;
解析 get 方式传参
<?php
// 写一个简单的控制器
class MyController
{
public function getInfor($name, $salary)
{
return "姓名: ==> $name, 工资: ==> $salary";
}
}
// var_dump($_SERVER['REQUEST_URI']);
//获取到路由的地址
$url = $_SERVER['REQUEST_URI'];
//将路由地址转数组
$urlarr = parse_url($url);
// var_dump($urlarr['query']);
//将需要的get部分的路由地址转数组
parse_str($urlarr['query'], $xarr);
// var_dump($xarr);
// https://help10086.io/0222/demo2.php?name=srp&salary=30000
echo (new MyController)->getInfor($xarr['name'], $xarr['salary']);