phapi/middleware-route

此包已被废弃且不再维护。未建议替代包。

处理路由和将请求分发到端点的中间件。

1.0.2 2015-10-26 11:33 UTC

This package is not auto-updated.

Last update: 2021-02-05 22:57:58 UTC


README

Build status Code Climate Test Coverage

Route Middleware 包包含两个中间件: Phapi\Middleware\Route\RoutePhapi\Middleware\Route\Dispatch,用于处理路由和将请求分发到端点

Route Middleware 会调用与当前 HTTP 请求的 URI 和方法匹配的第一个路由。如果请求 URI 与任何定义的路由都不匹配,则将向客户端返回 404 Not Found。如果请求方法未实现,则将返回 405 Method Not Allowed

为了找到匹配项,路由器会执行三件事情:首先尝试找到直接匹配项。对于不包含正则表达式的路由,这是可能的。如果找不到直接匹配项,路由器将检查其缓存以找到匹配项。作为最后的手段,路由器会尝试匹配包含正则表达式的路由。如果找到匹配项,它将被添加到缓存中。

安装

此中间件默认包含在Phapi 框架中,但如果您需要安装它,它可以通过PackagistComposer安装。

$ 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文件。

贡献

贡献、错误修复等总是受欢迎的。请点击此处