PHP 框架之路由与控制器
1. 为什么要使用路由
- 刚刚开始学 PHP 时,我们写过
http://php.cn/active.php?id=1
之类的 URI,使用 GET 方式获取参数。这样的 URI 有两个缺点,一是容易被 SQL 注射攻击,二是维护性可读性差。大家可以比较www.mysite.com/active/1
哪一种更具备可读性。 - 一个 PHP 初学者,刚开始做项目,项目做着做着规模做大了,常常这个 PHP 页面分发另一个 PHP 页面用 GET 方法传值,有时传的值还不止一个,时间一久,你的 WEB 项目,N 个 PHP 页面宛如一个复杂的蜘蛛网,让你难以维护。一旦有修改,会涉及很多 PHP 文件,工作量很大。
MVC 的单一入口机制可以解决维护难的问题,路由就是一套映射,可以让你一个 URI 对应一个方法
2. 如何实现一个路由,解析出控制器的方法和参数
- 这是一个员工上班打卡的控制器
<?php
//这是一个员工上班打卡的控制器
class StaffsController
{
public function getStaff($time, $name)
{
return "上班打卡时间:$time,员工姓名:$name";
}
}
// http://php.edu/5.14/route.php/staffs/getstaff/time/0830/name/xiaomei
// 1. 解析URI PATHINFO
// echo $_SERVER['PATH_INFO'];
$pathinfo = (array_values(array_filter(explode('/', $_SERVER['PATH_INFO']))));
// 2. 解析出控制器
$controller = ucfirst(array_shift($pathinfo)) . 'Controller';
// echo $controller;
// 3. 解析出控制器中的方法
$action = array_shift($pathinfo);
// echo $action;
// print_r($pathinfo);
// echo count($pathinfo);
// die();
// 4.解析出参数
$cs = [];
for ($i = 0; $i < count($pathinfo); $i += 2) {
if (isset($pathinfo[$i + 1])) {
$cs[$pathinfo[$i]] = $pathinfo[$i + 1];
}
}
// print_r($cs);
// 5. 调用控制器中的方法
$staff = new StaffsController();
echo $staff->$action(...array_values($cs));
//输出:上班打卡时间:0830,员工姓名:xiaomei
3. composer
的安装
Composer 是 PHP 的一个依赖管理工具。我们可以在项目中声明所依赖的外部工具库,Composer 会帮你安装这些依赖的库文件,有了它,我们就可以很轻松的使用一个命令将其他人的优秀代码引用到我们的项目中来。
Composer 默认情况下不是全局安装,而是基于指定的项目的某个目录中(例如 vendor)进行安装。
Composer 需要 PHP 5.3.2+ 以上版本,且需要开启 openssl。
Composer 可运行在 Windows 、 Linux 以及 OSX 平台上。
3.1 Wondows 平台
- Wondows 平台上,我们只需要下载https://getcomposer.org/Composer-Setup.exe后,一步步安装即可。
- 需要注意的是你需要开启 openssl 配置,我们打开 php 目录下的 php.ini,将
extension=php_openssl.dll
前面的分号去掉就可以了。 - 安装成功后,我们可以通过命令窗口(cmd) 输入
composer --version
命令来查看是否安装成功: 接下来我们可以更改
Packagist
为国内镜像:composer config -g repo.packagist composer https://packagist.phpcomposer.com
3.2 其他平台
大家可以百度
4. 总结
每一次调用控制器的某个方法时,函数都会把参数以关联数组的形式传入,做到“业务逻辑”和“表现”的分离,但是感觉这种分离还不是最好的,因为前端开发人员仍然需要面对甚至处理PHP代码,后端开发人员也有和前端人员沟通的成本,应该还有更好的方式。