mattvb91/lightrouter

轻量级路由器

0.1.0 2017-06-28 16:26 UTC

This package is auto-updated.

Last update: 2024-09-14 21:06:02 UTC


README

LightRouter

LightRouter

轻量级PHP路由器类。这是一个测试项目。如果您需要一个可靠且经过充分测试的解决方案,请查看FastRoute或AltoRouter。

基本用法

$router = new mattvb91\LightRouter\Router();
$router->addRoute('/', MyController::class);
$router->run();

定义路由

要添加新路由,请使用$router->addRoute()方法。如果没有定义操作,它将默认为index,这是在您的控制器上需要的。

您需要传递路由路径和控制器或闭包。如果您未指定操作,它将默认为'index',这是在您的控制器上需要的。

$router->addRoute('/', MyController::class);
$router->addRoute('/contact', MyController::class, 'contact');

$route->addRoute('/hello', function() {
    echo 'Hello world';
});

定义参数

您可以使用路由定义中的:parameter属性将参数传递到您的控制器操作中

$router->addRoute('/view/:param', MyController::class);

您的函数参数必须与定义的路由参数匹配。在我们的例子中,我们的控制器view方法将如下所示

public function view($param)
{
}

自动注入模型

如果您正在使用针对数据库模型的LightModel ORM包,您可以通过在控制器操作中指定实例类型来自动注入相关模型

//Your route definition
$router->addRoute('/user/view/:user', UserController::class, 'view');

//In your UserController::class
public function view(User $user)
{
    //$user is already fully loaded for you.
}

如果您正在使用自己的ORM或其他数据库模型类,您也可以在自定义模型中实现LightRouteModelInterface::class,该接口期望您返回一个完全加载的实例。

LightRouter会将您的路由中的相关$key传递到getForLightRoute方法中

public class CustomModel implements LightRouteModelInterface
{
    public static function getForLightRoute($routeParam): LightRouteModelInterface
    {
        //Use $routeParam to load your model class and return the instance
    }
}