noordawod / micro-router
一个模块化、低内存和快速的PHP路由器,具有可插拔的灵魂。
Requires
- php: >=5.5.0
- noordawod/assert: dev-master
- noordawod/php-util: dev-master
This package is not auto-updated.
Last update: 2019-09-09 02:38:43 UTC
README
那么,我们还需要另一个路由器来做REST和其他疯狂的事情吗?
如果你考虑以下因素,你可能会被说服尝试一下
-
一个命名空间统治一切(无需处理全局作用域)
-
极低的内存占用 + 只加载所需类
-
从第一行代码开始就设计为高度模块化、可配置且对开发者友好
-
除了
\Fine47\MicroRouter
类(它跟踪一些基本工具)外,所有其他都是基于接口的且可切换的 -
对客户端-服务器通信的非常抽象的处理(客户端和服务器组件也是模块化的)
-
过滤器允许开发者拦截请求以执行预处理和后处理逻辑
-
当发生错误时抛出异常(你不必测试NULL、FALSE等)
-
该库预装了一个用于处理HTTP请求的类(使用JSON)
-
该库预装了一个基于文件的路由类(无需配置yaml、XML、JSON或PHP配置文件来定义路由;只需创建一个实现
Action
接口的新文件即可) -
最好的是:如果你不喜欢预装实现,只需将其替换并创建自己的实现——这真的很简单,因为所有类都实现了简单的接口
-
该库附带了一些开发者友好的实用工具实现
- 使用cookie支持的Flash支持
- 仅使用cookie支持会话(不需要服务器端的任何后端,因此它是真正的无状态)
- 加密器类,便于加密和解密数字和二进制数据(非常适合创建令牌)
- 哈希器类,提供单向哈希支持,如果正确安装了PHP模块,则支持SIP算法
- 日志器类,用于基于文件和PHP错误日志的日志记录
- 使用JSON作为传输协议的HTTP请求处理
好的,很有趣;给我看看代码!
当然可以,朋友。以下是一个“Hello, world”风格的代码示例
<?php namespace MyApp; use Fine47\MicroRouter\Encryptors; use Fine47\MicroRouter\Routers; use Fine47\MicroRouter\Requests; use Fine47\MicroRouter\Import; require_once 'path/to/micro-router/src/micro-router.php'; Import::impl([ Import::TYPE_ROUTER => 'files', Import::TYPE_REQUEST => 'http', Import::TYPE_ENCRYPTOR => 'rijndael' ]); // Create a new MicroRouter handler. $engine = new \Fine47\MicroRouter(\Fine47\MicroRouter::DEVELOPMENT); // Configure the engine to use a files-based router. $engine->setRouter(new Routers\Files(['../routes'])); // Configure the engine to use RIJNDAEL encryptor. $engine->setEncryptor(new Encryptors\Rijndael( \MCRYPT_RIJNDAEL_128, 'CHANGE-ME', '0123456789fedcba' )); // Serve the request using engine. $engine->execute(new Requests\Http('/'));
嘿,朋友,这是很多代码
你可能会认为上面的代码很多,但请相信我:其他库也在幕后做同样的事情。所以,在MicroRouter的情况下,你实际上看到了代码的美丽:)
要么你喜欢它,要么不喜欢。由你决定。
路由器的视觉决策
使用composer轻松安装
要求库的推荐方式是使用composer require
命令。这会将composer引导到选择正确的版本约束(即 ~1.2),更新composer.json
并运行安装,所有这些都只需要一个命令。
$ composer require noordawod/micro-router
如果你需要一个特定的版本或要跟踪开发版本,只需将命令更改为
$ composer require noordawod/micro-router:dev-master@dev
总之:不要直接编辑composer.json
,让composer来做这件事(由rdohms慷慨提供的小贴士,谢谢朋友。)
目录结构
下载库(作为ZIP文件或通过克隆仓库)并解压文件后,目录结构将如下所示
example/
logs/
public/
routes/
src/
exceptions/
impl/
encryptors/
engines/
filters/
hashers/
loggers/
requests/
interfaces/
util/
以下是对这些目录的大致解释
example/
顶层目录,包含一个用于使用基于文件的路由器路由请求的示例应用程序。
example/public/
网站可公开访问的文档根(这是您选择的Web服务器中的DOCUMENT_ROOT的值)。
example/routes/
路由处理程序在此。请注意,默认路由器实现要求此目录位于网站公开可访问的文档根之外(在这个情况下是正确的)。
路由处理程序只是保存在与请求的URI相似的目录结构中的PHP脚本。例如,如果您想处理对
/hello/world
的调用,则创建如下目录结构
example/routes/hello/world
(这个结构应该已经存在)然后,创建一个名为
get.php
(或post.php
、head.php
等)的文件来处理不同的请求方法(GET、POST、HEAD等)
src/
顶层目录,包含所有库文件。此目录中包含两个文件
config.php
:应用程序配置,使用了用于
HttpAuto
引擎的合理值。当然,开发者在处理请求之前可以更改这些默认值。注意:如果加载此文件,它将加载下一个文件,因此您不需要自己加载它。
micro-router.php
:库的主要类文件(这是
\Fine47\MicroRouter
类所在之处)。
src/exceptions/
正如其名所示,此目录包含所有提供异常支持的类。为了帮助开发者找到他们代码中的错误,我们在异常中添加了一个
Magic
参数(一个简单的十六进制整数),以便开发者可以通过简单地搜索此值来找到错误。
src/impl/
顶层目录,包含所有接口的默认实现。由于MicroRouter的设计方式,如果您不喜欢某个特定的实现,您不必使用它——只需编写自己的并替换使用即可。
src/interfaces/
库的所有接口都在这里。通过研究各种接口,您可以了解库是如何构建的。也可以假设您在这里看到的任何接口都可以以与默认方式完全不同的方式实现。
src/util/
库操作所需的通用实用工具(作为静态函数实现),但也可以安全地用于您的应用程序。