selami / router
此包已废弃,不再维护。未建议替代包。
基于 nikic/FastRoute 构建,返回要实例化的控制器类名。
1.2.2
2019-03-03 11:34 UTC
Requires
- php: ^7.2
- nikic/fast-route: ^1.3
Requires (Dev)
- php-coveralls/php-coveralls: ^1.1
- phpstan/phpstan: ^0.10.6
- phpunit/phpcov: ^5.0
- phpunit/phpunit: ^7.5
- roave/security-advisories: dev-master
- squizlabs/php_codesniffer: ^3.3
- zendframework/zend-diactoros: ^1.8
README
基于 nikic/FastRoute 构建,返回要实例化的控制器类名,期望的内容类型和路由别名(如果已定义)。
安装
使用 composer 安装此库
$ composer require selami/router
示例
获取全局值。
<?php declare(strict_types=1); $request = new PSR7ServerRequest(); // Let's say this class implements PSR7 ServerRequestInterface $response = new PSR7ServerResponse(); // Let's say this class implements PSR7 ResponseInterface $defaultReturnType = Selami\Router\Router::JSON; // Possible values: Selami\Router\Router::HTML, Selami\Router\Router::JSON, Selami\Router::TEXT, Selami\Router\Router::CUSTOM, Selami\Router\Router::REDIRECT, Selami\Router::DOWNLOAD. To be used to send output. $requestMethod = 'GET'; // i.e. $_SERVER['REQUEST_METHOD'] $requestedUri = '/user/12/inbox'; // i.e. $_SERVER['REQUEST_URI']
创建 Selami\Router 实例。
$router = new Selami\Router( $defaultReturnType, $requestMethod, $requestedUri );
添加期望 HTTP 请求方法的路由。$route 变量使用 nikic/FastRoute 的路由语法。
use Selami\Router\Router; $route = '/'; $action = Controllers\Home::class; $returnType = Router::HTML; $alias = 'home'; $router->get( $route, // required $action, // required $returnType, // optional, default: $defaultReturnType $alias // optional, default null ); $router->post('/login', Controllers\Login::class, Router::REDIRECT); $router->get('/dashboard', Controllers\Dashboard::class, Router::HTML, 'dashboard'); $router->get('/api/user/{id}', Controllers\Api\Users::class, Router::JSON); $router->get('/user/{id:\d+}/{box}', Controllers\Api\Users\Inbox::class, Router::HTML, 'user_home');
获取请求的路由信息和别名。
$routeInfo = $router->getRoute(); // Returns Selami\Router\Route object.
现在您可以调用您的控制器。
$controller = new {$routeInfo->getController()}($routeInfo->getUriParameters()); $outputMethod = 'return' . ucfirst($routeInfo->getReturnType()); echo $controller->$outputMethod($request, $response);
我们的示例控制器类可以像这样
<?php declare(strict_types=1); namespace Controller\Api\Users; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use BaseController; class Inbox extends BaseController { private $uriParameters; public function __construct($uriParameters) { parent::__construct(); $this->uriParameters = $uriParameters; } public function returnHTML(ServerRequestInterface $request, ResponseInterface $response) { $response = $this->response->withHeader('Content-Type', 'text/html'); $response->getBody()->write('Your user id is: ' . $this->args['id'] . '. You are viewing your '. $this->uriParameters['box']); return $response->output(); } }
添加 get、post、put 等路由时的 $route 值语法。
参见 FastRoute 文档。