merophp / router
PHP的请求路由器
0.1-beta
2022-08-09 12:27 UTC
Requires
- php: >=7.4
Requires (Dev)
- phpunit/phpunit: ^9.5
README
快速、灵活且可扩展的PHP请求路由器。
安装
通过composer
composer require merophp/router
基本用法
路由定义将存储在路由收集器中。路由提供者的任务是提供从其路由集合中通过请求的HTTP方法路由。路由器从提供者获取路由,寻找匹配的路由。它还执行路由处理器。
require_once 'vendor/autoload.php';
use Merophp\Router\Routes\GetRoute;
use Merophp\Router\Collection\RouteCollection;
use Merophp\Router\Provider\RouteProvider;
use Merophp\Router\Router;
$collection = new RouteCollection;
$collection->addMultiple([
new GetRoute('/api/v1/foo', function(){
return 'Hello foo';
}),
new GetRoute('/api/v1/bar', function(){
return 'Hello bar';
}),
]);
$provider = new RouteProvider($collection);
$router = new Router($provider);
$myRoute = $router->match('GET', '/api/v1/foo');
$result = $router->dispatch($myRoute);
//Will print 'Hello bar'...
echo $result;
路由定义
路由定义由三部分组成:HTTP方法、模式和处理器。
use Merophp\Router\Routes\Route;
new Route(['GET','POST'], '/api/v1/foo', function(){
echo 'I will be executed';
});
可以使用通配符为所有HTTP方法提供一个路由定义
new Route(['*'], '/api/v1/foo', function(){
echo 'I am the handler';
});
如果路由定义只有一个HTTP方法,您也可以使用以下类
- Merophp\Router\Routes\GetRoute
- Merophp\Router\Routes\PostRoute
- Merophp\Router\Routes\PutRoute
- Merophp\Router\Routes\DeleteRoute
- Merophp\Router\Routes\PatchRoute
- Merophp\Router\Routes\OptionsRoute
- Merophp\Router\Routes\HeadRoute
new GetRoute('/api/v1/foo', function(){
echo 'I am the handler for GET:/api/v1/foo';
});
new PostRoute('/api/v1/foo', function(){
echo 'I am the handler for POST:/api/v1/foo';
});
模式
路由模式将与给定的URI路径进行比较。分发器将找到给定HTTP方法和URI路径的最佳匹配的路由定义。您可以在路由模式中使用通配符和占位符。占位符的值将传递给路由处理器。
new GetRoute('*', function(){
echo 'I will be executed if no other definition fits';
});
new GetRoute('/api/v1/*', function(){
});
new GetRoute('/api/v1/events/{eventid}', function($eventid){
echo $eventid;
});
new DeleteRoute('/api/v1/events/{eventid}', function($eventid){
echo $eventid.' deleted';
});
处理器
任何可调用对象都可以用作路由处理器。
作用域
作用域是路由的括号,用于防止您为不同路由多次编写相同的模式部分。
use Merophp\Router\Routes\Scope;
use Merophp\Router\Routes\GetRoute;
use Merophp\Router\Routes\DeleteRoute;
new Scope('/api/v1/events/{eventid}', [
new GetRoute('', function(){}),
new DeleteRoute('', function(){})
]);
作用域的模式将用作路由模式的前缀。