mrmadclown/ennodia

Ennodia 是一个 PHP 路由器

v3.0 2023-01-26 21:39 UTC

README

License: MIT Latest Stable Version Total Downloads example workflow example workflow

这是一个非常直接的路由器,一个路由由一个正则表达式、一个有资格的控制器路径和可选的 HTTP 方法组成。

安装

composer require mrmadclown/ennodia

路由器通过传递 Psr\Container\ContainerInterface::class 的实现和一个 MrMadClown\Ennodia\RouteCollection::class 来构建。

使用方法

use MrMadClown\Ennodia\RouteCollection;
use MrMadClown\Ennodia\SingleRoute;
use MrMadClown\Ennodia\Router;
use MrMadClown\Ennodia\MiddlewareGroup;
use MrMadClown\Ennodia\RouteCollection;
use Symfony\Component\HttpFoundation\Request;

use App\Http\Controllers\IndexController;
use App\Container; // implements Psr\Container\ContainerInterface;

$routes = RouteCollection::collect([
    SingleRoute::get('#^index$#', IndexController::class),
]);
$request = Request::createFromGlobals();
$router = new Router(new Container(), $routes, new MiddlewareGroup([]));
$response = $router->handle($request);

控制器可以实现了 __invokeget, post, put, patch, delete, 等等

路由参数

定义一个带有变量的路由

 SingleRoute::get('#^user/(?P<userId>\d+)$#', UserController::class),
 SingleRoute::get('#^(?P<user>[a-z]+)/(?P<repository>[a-z]+)$#i', UserRepositoryController::class),

路由中的变量传递到控制器中的相应函数

class UserController {
    public function get(int $userId): Response {
        //...
    }
}

class UserRepositoryController {
    public function __invoke(string $user, string $repository): Response {
        //...
    }
 }