phapi / middleware-route
处理路由和将请求分发到端点的中间件。
Requires
- php: >=5.6.0
- phapi/contract: 1.*
- phapi/exception: 1.*
- psr/http-message: 1.*
Requires (Dev)
- codeclimate/php-test-reporter: dev-master
- mockery/mockery: 0.9.*
- phpunit/phpunit: 4.*
This package is not auto-updated.
Last update: 2021-02-05 22:57:58 UTC
README
Route Middleware 包包含两个中间件: Phapi\Middleware\Route\Route 和 Phapi\Middleware\Route\Dispatch,用于处理路由和将请求分发到端点。
Route Middleware 会调用与当前 HTTP 请求的 URI 和方法匹配的第一个路由。如果请求 URI 与任何定义的路由都不匹配,则将向客户端返回 404 Not Found。如果请求方法未实现,则将返回 405 Method Not Allowed。
为了找到匹配项,路由器会执行三件事情:首先尝试找到直接匹配项。对于不包含正则表达式的路由,这是可能的。如果找不到直接匹配项,路由器将检查其缓存以找到匹配项。作为最后的手段,路由器会尝试匹配包含正则表达式的路由。如果找到匹配项,它将被添加到缓存中。
安装
此中间件默认包含在Phapi 框架中,但如果您需要安装它,它可以通过Packagist和Composer安装。
$ php composer.phar require phapi/middleware-route:1.*
配置
配置包含三个步骤
- 创建中间件对象
- 定义路由
- 添加到管道
创建中间件对象
<?php use Phapi\Middleware\Route\Route; use Phapi\Middleware\Route\Router; use Phapi\Middleware\Route\RouteParser; use Phapi\Middleware\Route\Dispatch; // Use the dependency injection container to get the configured cache $route = new Route(new Router(new RouteParser, $container['cache']));
定义路由
可以通过将包含路由(键)和资源名称(值)的数组传递给 addRoutes 函数来添加路由。
<?php // Create a list of routes $routes = [ '/users' => '\\Phapi\\Endpoint\\Users', '/users/{name:a}' => '\\Phapi\\Endpoint\\User', '/articles/{id:[0-9]+}' => '\\Phapi\\Endpoint\\Article', '/blog/{slug}/{title:c}?' => '\\Phapi\\Endpoint\\Blog\\Post', ]; $route->addRoutes($routes);
默认情况下,使用路由模式语法,其中 {foo} 指定一个名为 foo 的占位符,匹配字符串 [^/]+。为了调整占位符匹配的图案,您可以指定一个自定义模式,例如 {bar:[0-9]+}。
正则表达式快捷方式
:i => :/d+ # numbers only :a => :[a-zA-Z0-9]+ # alphanumeric :c => :[a-zA-Z0-9+_-\.]+ # alnumnumeric and +-_. characters :h => :[a-fA-F0-9]+ # hex
在端点中获取参数
路由器会将参数注入到端点上被调用的方法中。让我们使用这个路由作为例子
<?php $routes = [ '/users/{name:a}' => '\\Phapi\\Endpoint\\User', ];
如果我们想从 /users/phapi 获取 name 的值,我们需要指定一个如下所示的端点
<?php class User extends Endpoint { public function get($name) // $name will contain 'phapi' { ... } }
添加到管道
最后但并非最不重要的是,将中间件添加到管道中。Dispatcher 不需要任何配置。
<?php $pipeline->pipe($route); $pipeline->pipe(new \Phapi\Middleware\Route\Dispatcher());
完整示例
<?php use Phapi\Middleware\Route\Route; use Phapi\Middleware\Route\Router; use Phapi\Middleware\Route\RouteParser; use Phapi\Middleware\Route\Dispatch; // Use the dependency injection container to get the configured cache $route = new Route(new Router(new RouteParser, $container['cache'])); // Create a list of routes $routes = [ '/users' => '\\Phapi\\Endpoint\\Users', '/users/{name:a}' => '\\Phapi\\Endpoint\\User', '/articles/{id:[0-9]+}' => '\\Phapi\\Endpoint\\Article', '/blog/{slug}/{title:c}?' => '\\Phapi\\Endpoint\\Blog\\Post', ]; $route->addRoutes($routes); $pipeline->pipe($route); $pipeline->pipe(new \Phapi\Middleware\Route\Dispatcher());
有关如何配置与Phapi框架集成的更多信息,请参阅配置文档。
Phapi
该中间件是Phapi框架使用的Phapi包。中间件也符合PSR-7规范,并实现了Phapi中间件合约。
许可协议
Route中间件采用MIT许可协议 - 详细信息请参阅license.md文件。
贡献
贡献、错误修复等总是受欢迎的。请点击此处。