用 Composer构建自己的 PHP 框架之构建路由
构建自己的PHP框架系列之二:如何构建路由
在上一篇中,我们已经成功地建立了一个空的Composer项目,本篇将深入如何构建路由。路由是框架的核心组成部分,理解并构建路由,意味着你已经迈入了PHP框架构建的大门。
路由,作为框架的精髓,它的核心作用在于连接URL和对应的处理函数。了解并掌握了路由的构建,相当于掌握了PHP框架开发的一把利剑。接下来,我们将开始构建路由的过程。
我们从GitHub上搜索并推荐一个路由库——Macaw。这个库对应的Composer包为codingbean/macaw。在开始安装之前,我们需要更改composer.json文件,添加Macaw包的依赖。如下:
```json
{
"require": {
"codingbean/macaw": "dev-master"
}
}
```
运行`composer update`后,你将得到相应的目录结构,其中就包括了Macaw包。至此,Macaw包安装成功!
接下来,我们赋予MFFC框架生命力,让它真正地跑起来!在MFFC/public文件夹下新建index.php文件,并引入自动载入功能和路由配置文件。新建MFFC/config文件夹,并在其中新建routs.php文件,配置路由规则。例如:
```php
use NoahBuscher\Macaw\Macaw;
Macaw::get('fuck', function() {
echo "成功!";
});
Macaw::get('(:all)', function($fu) {
echo '未匹配到路由
'.$fu;
});
Macaw::dispatch();
```
然后,你需要根据你所使用的HTTP服务软件类型设置伪静态规则,使得所有非静态文件最终都会指向index.php。之后将某一个端口分配给MFFC/public目录,这一步推荐使用Apache或Nginx来完成。如果你使用PHP内置HTTP服务器,需要确保路由的URL正确书写。例如,Macaw::get('fuck')应当写成Macaw::get('/fuck')才能正确响应请求。目前的代码在Apache + mod_php和Nginx + php-fpm环境下均可正常运行。
当你的路由配置成功后,访问特定的URL,例如
接下来简单分析一下Macaw的工作机制:Composer的自动加载机制会在内存中维护一个全量命名空间类名到文件名的数组;接着我们在路由文件中载入了Macaw类并使用其静态方法::get()来配置路由规则;这个静态方法接受两个参数,一个是具体的function名称(这里是get),另一个是传递给处理函数的参数。这样,当特定的URL被访问时,就会调用相应的处理函数。整个Macaw库只有一个文件,代码简洁明了,易于理解。
URL是我们想要监听的互联网地址,它如同网络世界中的一座灯塔,指引着我们的程序找到对应的内容。这个特定的URL值就是我们参数中的第一个参数。在每次的网络请求中,当这个特定的URL被触发时,我们的程序就会开始执行一系列的操作。这些操作被封装在第二个参数中,它是一个PHP闭包,代表URL匹配成功后我们希望实现的功能,是我们在代码中定义的回调。
接下来,有一个名为`__callstatic()`的函数,它主要负责管理我们的路由系统。这个函数的工作方式十分直观,首先它会接收到目标URL(例如`/fuck`),然后将这个URL、HTTP方法(例如GET)和我们定义的回调函数一起压入到Macaw类的三个静态成员变量中:$routes、$methods和$callbacks。这些变量是数组形式,帮助我们存储和管理所有的路由信息。
在我们的路由文件中,有一行关键的代码:Macaw::dispatch()。这是真正处理当前URL请求的地方。当我们的程序接收到一个URL请求时,Macaw::dispatch()会立即开始工作。如果URL能直接匹配到已定义的路由,那么它将直接调用对应的回调函数开始执行操作。如果URL不能直接匹配到任何路由,那么它将利用强大的正则表达式进行匹配,确保每一个URL请求都能得到处理。
在这个整个过程中,我们的应用程序通过Cambrian渲染技术展示出动态的网页内容。每一处的改动和更新都是通过这种方式进行传递和渲染的。'body'的指令就是从Cambrian模板中获取需要展示的内容,并将其渲染到网页上,为用户带来流畅、丰富的体验。
无论是URL的监听、回调的设计还是路由的处理和Cambrian的渲染技术,都是为了让我们的应用程序更加智能、高效和用户体验友好。
编程语言
- 用 Composer构建自己的 PHP 框架之构建路由
- html5+javascript实现简单上传的注意细节
- 原生js实现放大镜效果
- Vue数据驱动模拟实现3
- 微信小程序(微信应用号)开发工具0.9版安装详细教
- AngularJS入门教程之MVC架构实例分析
- JavaScript定时器制作弹窗小广告
- jQuery仿天猫实现超炫的加入购物车
- 详解JavaScript中数组和字符串的lastIndexOf()方法使用
- javascript实现简单的进度条
- 让ThinkPHP的模板引擎达到最佳效率的方法详解
- 原生javascript实现的ajax异步封装功能示例
- ThinkPHP框架表单验证操作方法
- thinkPHP5项目中实现QQ第三方登录功能
- php实现单链表的实例代码
- javascript+php实现根据用户时区显示当地时间的方法