用 Composer构建自己的 PHP 框架之构建路由_php实例

上一篇中我们已经建立了一个空的 Composer 项目,本篇将讲述如何构建路由。

久负盛名的 CodeIgniter 框架是很多人的 PHP 开发入门框架,同样也是我开始学习如何从头构建一个网站的框架。在 CI 中我学到了很多,其中对 MVC 的深入理解和对框架本质的理解对我的影响最大。从使用框架是为了提高开发效率的角度来看,框架的本质就是路由。

下面我们就开始自己来构建路由,先去 GitHub 搜一下:点此查看搜索结果

推荐https://github.com/NoahBuscher/Macaw,对应的 Composer 包为codingbean/macaw ,作者应该是在 GitHub 上改名了,这可能会造成一定的困扰。下面开始安装 Macaw 包,更改 composer.json:

{ "require": {  "codingbean/macaw": "dev-master" }}

运行 composer update,成功之后将得到以下目录:

至此,Macaw 包安装成功!

下面,就是见证奇迹的时刻!我们将赋予 MFFC 生命力,让它真正地跑起来!

新建 MFFC/public 文件夹,这个文件夹将是用户唯一可见的部分。在文件夹下新建 index.php 文件:

<?php// Autoload 自动载入require '../vendor/autoload.php';// 路由配置require '../config/routes.php';

上面一行表示引入 Composer 的自动载入功能,下面一行表示载入路由配置文件。新建 MFFC/config 文件夹,在里面新建 routs.php 文件,内容如下:

<?phpuse NoahBuscher\Macaw\Macaw;Macaw::get('fuck', function() { echo "成功!";});Macaw::get('(:all)', function($fu) { echo '未匹配到路由<br>'.$fu;});Macaw::dispatch();

Macaw 的文档位于https://github.com/NoahBuscher/Macaw,请按照你的 HTTP 服务软件类型自行设置伪静态,其实跟绝大多数框架一样:“将所有非静态文件全部指向 index.php”。

然后,将某一个端口用 Apache 或 Nginx 分配给 MFFC/public 目录,这一步十分建议用 Apache 或者 Nginx 做。

如果使用 PHP 内置 HTTP 服务器:

cd public && php -S 127.0.0.1:3000

将导致路由的Macaw::get('fuck' 必须写成Macaw::get('/fuck' 才能响应。

目前的代码使用 Apache + mod_php 和 Nginx + php-fpm 方式均没有问题。

我在本地绑定了 81 端口,访问http://127.0.0.1:81/fuck 可以看到:

如果页面乱码,请调整编码为 UTF-8。如果你成功看到以上页面,那么恭喜你,路由配置成功!

Macaw 只有一个文件,去除空行总共也就一百行多一点,通过代码我们能直接看明白它是怎么工作的。下面我简略分析一下:

1. Composer 的自动加载在每次 URL 驱动 MFFC/public/index.php 之后会在内存中维护一个全量命名空间类名到文件名的数组,这样当我们在代码中使用某个类的时候,将自动载入该类所在的文件。

2. 我们在路由文件中载入了 Macaw 类:“use NoahBuscher\Macaw\Macaw;”,接着调用了两次静态方法 ::get(),这个方法是不存在的,将由MFFC/vendor/codingbean/macaw/Macaw.php 中的__callstatic() 接管。

3. 这个函数接受两个参数,$method 和 $params,前者是具体的 function 名称,在这里就是 get,后者是这次调用传递的参数,即 Macaw::get('fuck',function(){...}) 中的两个参数。第一个参数是我们想要监听的 URL 值,第二个参数是一个 PHP 闭包,作为回调,代表 URL 匹配成功后我们想要做的事情。

4.__callstatic() 做的事情也很简单,分别将目标URL(即 /fuck)、HTTP方法(即 GET)和回调代码压入$routes、$methods 和$callbacks 三个 Macaw 类的静态成员变量(数组)中。

5. 路由文件最后一行的Macaw::dispatch(); 方法才是真正处理当前 URL 的地方。能直接匹配到的会直接调用回调,不能直接匹配到的将利用正则进行匹配。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索php
, 框架
, composer
构建路由
composer 框架、composer 搭建框架、php composer 框架、ci框架 composer.json、composer 自己的框架,以便于您获取更多的相关知识。

时间: 2024-08-26 21:04:30

用 Composer构建自己的 PHP 框架之构建路由_php实例的相关文章

Yii框架上传图片用法总结_php实例

本文实例讲述了Yii框架上传图片用法.分享给大家供大家参考,具体如下: Yii 提供了 CUploadedFile 来上传文件,比如图片,或者文档. 官方关于这个类的介绍 : CUploadedFile represents the information for an uploaded file. Call getInstance to retrieve the instance of an uploaded file, and then use saveAs to save it on th

CI框架使用composer安装的依赖包步骤与方法分析_php实例

本文实例讲述了CI框架使用composer安装的依赖包的相关操作步骤与方法.分享给大家供大家参考,具体如下: 本文针对 Linux 系统,windows 第一步 根据 composer 官网进行安装 后面的步骤相同 step 1  全局安装 composer $ curl -sS https://getcomposer.org/installer | php $ mv composer.phar /usr/local/bin/composer step 2  创建composer.json 到你

在Mac OS上搭建PHP的Yii框架及相关测试环境_php实例

YII集成了单元测试和功能测试,借助phpunit和selenium实现.笔者在配置过程中遇到了不少麻烦,纪录在此. 必要概念 seleniumselenium是个著名的自动化测试工具,可以调起本地的浏览器来完成测试,所以可以用来自动化测试web项目.selenium分为服务端和客户端,服务端使用java开发,所以需要一个jdk,服务端在启动时,会启动一个http服务,客户端通过与服务端进行http通信,向服务端发起测试请求,服务端会自动调起浏览器完成测试.测试人员负责编写客户端脚本,支持大部分

PHP的Yii框架入门使用教程_php实例

安装 Yii 的安装由如下两步组成: 从 yiiframework.com 下载 Yii 框架. 将 Yii 压缩包解压至一个 Web 可访问的目录. Tip|提示: 安装在 Web 目录不是必须的,每个 Yii 应用都有一个入口脚本,只有它才必须暴露给 Web 用户.其它 PHP 脚本(包括 Yii)应该保护起来不被 Web 访问,因为它们可能会被黑客利用.需求 安装完 Yii 以后你也许想验证一下你的服务器是否满足使用 Yii 的要求,只需浏览器中输入如下网址来访问需求检测脚本: http:

Yii框架登录流程分析_php实例

本文详细分析了Yii框架的登录流程.分享给大家供大家参考.具体分析如下: Yii对于新手来说上手有点难度,特别是关于session,cookie和用户验证.现在我们就Yii中登录流程,来讲讲Yii开发中如何设置session,cookie和用户验证方面的一些通用知识 1. 概述 Yii是一个全栈式的MVC框架,所谓全栈式指的是Yii框架本身实现了web开发中所要用到的所有功能,比如MVC,ORM(DAO/ActiveRecord), 全球化(I18N/L10N), 缓存(caching), 基于

CI框架的安全性分析_php实例

本文分析了CI框架的安全性.分享给大家供大家参考,具体如下: 用过ci框架的人都知道,ci框架能大大缩短你的代码.其实,ci框架更能提高你网站的安全性. 防止对数据库的攻击 数据输入可能引发许多问题.因为 HTML 和数据库的限制,数据中总包含特定的符号-举例来说,省略符号和引号-可能导致你的数据库遭到攻击,最终得到你无法预料的结果. 解决方案是在把这些数据存入数据库前对这些数据进行相关处理.这样做会浪费一些系统时间,增加一些额外编码. CI 的表单辅助函数会自动地完成这些工作.因此,当你编写一

ThinkPHP框架安全实现分析_php实例

ThinkPHP框架是国内比较流行的PHP框架之一,虽然跟国外的那些个框架没法比,但优点在于,恩,中文手册很全面.最近研究SQL注入,之前用TP框架的时候因为底层提供了安全功能,在开发过程中没怎么考虑安全问题. 一.不得不说的I函数 TP系统提供了I函数用于输入变量的过滤.整个函数主体的意义就是获取各种格式的数据,比如I('get.').I('post.id'),然后用htmlspecialchars函数(默认情况下)进行处理. 如果需要采用其他的方法进行安全过滤,可以从/ThinkPHP/Co

codeigniter框架批量插入数据_php实例

复制代码 代码如下: $sub_form = array();  $loop = 0;  $ins_loop = 0;  $sum = count($form_datas);  $this->logger->info('insert data total:'.$sum);  //使用事物批量导入有助于提高插入效率  $callStartTime = microtime(true);  $this->db->trans_start();  foreach ( $form_datas

基于PHP Web开发MVC框架的Smarty使用说明_php实例

一.Smarty简明教程 1.安装演示 下载最新版本的Smarty-3.1.12,然后解压下载的文件.接下来演示Smarty自带的demo例子. (1)下载地址:http://www.smarty.net/download (2)在你的WEB服务器根目录下建立新目录,这里我在/var/www下创建yqting/目录,然后将解压之后的目录中的demo/和libs/目录复制到/var/www/yqting/目录下. (3)这里要特别注意demo/目录下cache/和template_c/两个目录,一