lucid/mux

PSR-7 兼容的 HTTP 路由库

维护者

详细信息

github.com/lucidphp/mux

源代码

v0.0.1 2016-04-12 19:51 UTC

This package is not auto-updated.

Last update: 2024-09-14 18:04:24 UTC


README

Author Source Code Software License

Build Status Code Coverage HHVM

安装

> composer require lucid/mux

使用

创建 coute 集合

手动

<?php

use Lucid\Mux\Route;
use Lucid\Mux\Routes;

$routes = new Routes;
$routes->add('index', new Route('/', 'Acme\FrontController@getIndex'));

使用构建器

<?php

use Lucid\Mux\RouteCollectionBuilder as Builder;

$builder = new Builder;

// adds a GET route
$builder->get('/', 'Acme\FrontController@getIndex');

// adds a POST route
$builder->post('/user', 'Acme\UserController@createUser');

// adds a UPDATE route
$builder->update('/user/{id}', 'Acme\UserController@updateUser');

// adds a DELETE route
$builder->delete('/user/{id}', 'Acme\UserController@deleteUser');

分发路由

路由器组件接收一个请求上下文对象以分发相应的路由操作。

<?php
use Lucid\Mux\Router;
use Lucid\Mux\Request\Context as RequestContext;

$router = new Router($builder->getCollection());

$request = new RequestContext(
    current(explode('?', $_SERVER['REQUEST_URI'])),
    $_SERVER['REQUEST_METHOD']
);

$response = $router->dispatch($request);

处理 PSR-7 请求

您可以使用 Context::fromPsrRequest() 方法轻松地从现有的 psr7 兼容服务器请求创建请求上下文。

<?php
$request = new RequestContext::fromPsrRequest($psrRequest);

分发命名路由

<?php

$options = [
    'id' => 12
];

$response = $router->route('user.delete', $options);

高级路由器配置

路由器主要依赖于两个主要组件

  1. 一个处理程序分发器,负责查找并执行给定的操作(在路由对象上定义)
  • 一个响应映射器,能够将响应映射到期望的类型

处理程序分发器

默认情况下,处理程序分发器/解析器将检查给定的处理程序是否可调用。如果处理程序是一个包含 @ 符号的字符串,则假设左侧代表类名,右侧代表方法。

依赖注入

如果处理程序解析器(默认为 Lucid\Mux\Handler\Resolver)使用 Interop\Container\ContainerInterface 实例构造,它还会检查左侧是否是 di 容器注册的服务。

<?php

use Lucid\Mux\Handler\Resolver;
use Lucid\Mux\Handler\Dispatcher;

$resolver = new Resolver($container)
$dispatcher = new Dispatcher($resolver);

响应映射器

默认情况下,响应映射器是一个简单的透明映射器。然而,很容易创建一个适合您特定需求的自定义映射器。

<?php

use Zend\Diactoros\Response;

use Lucid\Mux\Request\ResponseMapperInterface.php;

class PsrResponseMapper implements ResponseMapperInterface
{
    public function mapResponse($response)
    {
        return new Response($response);
    }
}