lucid/mux
PSR-7 兼容的 HTTP 路由库
v0.0.1
2016-04-12 19:51 UTC
Requires
- php: ^5.6 || ^7.0
Requires (Dev)
- container-interop/container-interop: ~1.1.0
- lucid/resource: dev-develop
- phpunit/phpunit: ^5.2
- zendframework/zend-diactoros: ^1.3
Suggests
- container-interop/container-interop: For resolving controllers via a DI container.
- lucid/resource: For loading routes from file definitions.
This package is not auto-updated.
Last update: 2024-09-14 18:04:24 UTC
README
安装
> 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);
高级路由器配置
路由器主要依赖于两个主要组件
- 一个处理程序分发器,负责查找并执行给定的操作(在路由对象上定义)
- 一个响应映射器,能够将响应映射到期望的类型
处理程序分发器
默认情况下,处理程序分发器/解析器将检查给定的处理程序是否可调用。如果处理程序是一个包含 @ 符号的字符串,则假设左侧代表类名,右侧代表方法。
依赖注入
如果处理程序解析器(默认为 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); } }