echo-fusion/routemanager

一个轻量级且灵活的路由包,帮助管理PHP应用程序中的HTTP路由。支持PSR-7和PSR-15,专为MVC架构和中间件集成设计。

v1.0.0 2024-10-01 12:01 UTC

This package is auto-updated.

Last update: 2024-10-01 12:06:29 UTC


README

一个轻量级且灵活的路由包,帮助管理PHP应用程序中的HTTP路由。支持PSR-7和PSR-15,专为MVC架构和中间件集成设计。

安装

通过Composer

$ composer require echo-fusion/routemanager

要求

本版本支持的PHP版本如下。

  • PHP 8.1
  • PHP 8.2
  • PHP 8.3

用法

use EchoFusion\RouteManager\Router;
use EchoFusion\RouteManager\RouteMatcher\RouteMatcher;

$routeMatcher = new RouteMatcher();
$router = new Router($routeMatcher);

初始化路由器后,您可以定义路由,并可选地对路由参数进行正则表达式约束检查。

路由中的操作参数可以是

  • 数组 (控制器,方法)
  • 闭包
use Psr\Http\Message\ServerRequestInterface;

// simple route
$router->post(
    name: 'api.store', 
    path: '/api', 
    action: [ApiController::class, 'store']
);

// route parameter with regex constraints
$router->get(
    name: 'blog-show',
    path: '/post/{id}/detail/{slug}',
    action: function(int $id, string $slug,  ServerRequestInterface $request) {
        // write your code here...           
        var_dump($id , $slug);
    }),
    constraints: [
        'id' => '[0-9]+',
        'slug' => '[a-z0-9\-]+',
    ]
);

// adding multiple route middleware as variadic params
$router->post(
    name: 'register', 
    path: '/register', 
    action: [AuthController::class, 'register']
)->middlewares(GuestMiddleware::class);

如果请求与任何定义的路由匹配,它将返回RouteMatchInterface的实例。

try {
    $routeMatch = $router->dispatch($request);
} catch (RouteNotFoundException $e) {
    // Handle route not found
}

现在,您可以调用控制器并使用给定方法

$action = $routeMatch->getRoute()->getAction();

// Get the route parameters and request
$routeParams = $routeMatch->getParams();
$params = array_merge($routeParams, [$request]);

// Call the action (callable or controller method) with type hinting
return call_user_func_array($action, $params);

测试

测试包括PHPUnit和PHPStan(第7级)。

$ composer test

致谢

Amir Shadanfar 开发和维护。
LinkedIn 上联系。

许可

MIT许可(MIT)。有关更多信息,请参阅许可文件