guyliangilsing/php-abstract-router

一个简单的包,为您提供无框架依赖的路由器。

1.1.1 2022-06-14 21:28 UTC

This package is auto-updated.

Last update: 2024-09-15 02:43:09 UTC


README

一个简单的包,为您提供无框架依赖的路由器。

目录

这究竟是什么?

PHPAbstractRouter 是一个无框架依赖的路由器,允许您手动定义路由或通过属性定义。使用此包的人需要提供实际的路由后端。后端可以是框架(如 slim 4),或者真正的路由器(如 FastRoute)。

安装

$ composer require guyliangilsing/php-abstract-router

使用

手动定义路由

您可以通过 Router 类手动定义路由

use use PHPAbstractRouter\HTTP\Router;;

$routeRegisterer = // Your bridge class...
$router = new Router($routeRegisterer);

$router->get('/', MyController::class,'renderIndex');
$router->get('/about', MyController::class, 'renderAbout');

通过属性定义路由

您可以在类内部通过属性定义您的路由

use PHPAbstractRouter\HTTP\Attributes\GET;
use PHPAbstractRouter\HTTP\Attributes\Group;
use PHPAbstractRouter\HTTP\Attributes\POST;

#[Group('/test')]
final class MyController
{
    #[GET('/')]
    public function renderIndex(): string
    {
        return "index.php";
    }

    #[POST('/')]
    public function indexPOST(): string
    {
        return "POST index.php";
    }

    #[GET('/about')]
    public function renderAbout(): string
    {
        return "about.php";
    }

    #[POST('/about')]
    public function aboutPOST(): string
    {
        return "POST about.php";
    }
}

定义完您的路由后,您可以让 RouterFacade 收集它们

use use PHPAbstractRouter\HTTP\Router;;

$routeRegisterer = // Your bridge class...
$router = new Router($routeRegisterer);

$router->fromClass(MyController::class);

定义分组路由

可以通过 GroupRouter 类定义分组路由

use PHPAbstractRouter\HTTP\GroupRouter;
use PHPAbstractRouter\HTTP\Router;

$dispatcher = // Your custom dispatcher here...
$router = new RouterFacade($dispatcher);

$router->group('/test', function(GroupRouter $group) {
    $group->get('', MyController::class, 'renderIndex');
    $group->get('/about', MyController::class, 'renderAbout');
});

集成路由后端

要集成您首选的路由后端,您只需实现 BackendRouteRegistererInterface 接口

use PHPAbstractRouter\HTTP\BackendRouteRegistererInterface;

final class BackendRouteRegisterer implements BackendRouteRegistererInterface
{
    public function route(HTTPRoute $route): void
    {
        // Todo:: Implement your registration logic here...
    }

    public function routeGroup(HTTPRouteGroup $group): void
    {
        // Todo:: Implement your registration logic here...
    }
}

实现此接口后,您可以通过构造函数将其传递给 Router 类。