kenphp / router
简单的PHP路由器
1.0.1
2019-01-26 06:35 UTC
Requires
- php: >=7.0
Requires (Dev)
- codeception/codeception: ^2.3
This package is auto-updated.
Last update: 2024-09-15 03:44:46 UTC
README
这是一个简单的PHP路由器,适用于您的Web应用程序。该库是KenPHP项目的一部分,但也可以独立使用。
功能
- 静态路由模式
- 动态路由模式
- 命名参数
- 可选参数
- 基于正则表达式的路由模式
- 子路由
- 支持Web应用程序路由
- 路由中间件的前后处理
- 当路由未找到时的自定义处理程序
它做什么?
- 存储路由模式、处理程序和中间件信息
- 解析请求以匹配模式
它不做什么?
- 不解析路由路径从 $_SERVER 或其他任何方式。您必须提供路由路径和方法到
Router::resolve
方法。 - 执行中间件和处理程序。它只返回一个包含匹配的路由处理程序、中间件和请求中找到的参数的数组。
- 为什么这个库不接收
Psr\Http\Message\RequestInterface
实现并返回Psr\Http\Message\ResponseInterface
?
这个库旨在尽可能给用户最大的自由。并不是每个人都在使用PSR-7实现,我们希望尊重这一点。
要求
- PHP 7.0 或更高版本
安装
最简单的方法是使用Composer
$ composer require kenphp/router
方法
-
route($method, $route, $handler, $options = []) : void
示例
$router->route('GET', '/users', ['UserController', 'listUsers']);
-
get($route, $handler, $options = []) : void
示例
$router->get('/users/{id}', ['UserController', 'getUser']);
-
head($route, $handler, $options = []) : void
示例
$router->head('/users', ['UserController', 'listUsers']);
-
post($route, $handler, $options = []) : void
示例
$router->post('/users', ['UserController', 'createUser']);
-
put($route, $handler, $options = []) : void
示例
$router->put('/users/{id}', ['UserController', 'updateUser']);
-
delete($route, $handler, $options = []) : void
示例
$router->delete('/users/{id}', ['UserController', 'deleteUser']);
-
group($route, $fn, $options = []) : void
示例
$router->group('/api', function() use ($router) { $router->get('/products/{id}', ['ProductController', 'getProduct']); });
-
setNotFoundHandler(callable $handler) : void
示例
$router->setNotFoundHandler(function() { echo 'Page not found.'; });
-
resolve($requestRoute, $method) : null|array
此函数将返回一个包含以下键的数组
处理程序
参数
- 可选键。这将填充来自
$options
参数的任何数据。
示例
$router->get('/users/{id}', ['UserController', 'getUser'], [ 'namespace' => 'app\controllers' ]); $routeArray = $router->resolve('/users/1', 'GET'); /** * $routeArray would contains * [ * 'handler' => ['UserController', 'getUser'], * 'params' => ['id' => 1], * 'namespace' => 'app/controllers', * ] */