merophp/router

PHP的请求路由器

0.1-beta 2022-08-09 12:27 UTC

This package is auto-updated.

Last update: 2024-09-15 17:25:35 UTC


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(){})
]);

作用域的模式将用作路由模式的前缀。