首页 > 解决方案 > 如何在 Lumen 上创建通配符路由?

问题描述

假设我有一个名为 TeamsController 的控制器。控制器具有以下方法,该方法返回用户有权访问的所有团队。

public function findAll(Request $request): JsonResponse
{
  //...
}

然后我有一堆使用相同方法的其他控制器。我想创建一个适用于所有控制器的单一路由,因此我不需要在每次创建新控制器时为每个控制器添加一行。

我无法从 URI 中获取控制器名称。这是我尝试过的。

$router->group(['middleware' => 'jwt.auth'], function () use ($router) {
    // This works
    //$router->get('teams', 'TeamsController@findAll');
    
    // This just returns TeamsController@findAll string as a response
    $router->get('{resource}', function ($resource) {
        return ucfirst($resource) . 'Controller@findAll';
    });
});

标签: phplaravelrouteslumenfastroute

解决方案


您返回一个字符串而不是调用控制器操作:我相信 Laravel 以这种方式加载控制器(未经测试)

$router->group(['middleware' => 'jwt.auth'], function () use ($router) {
  $router->get('{resource}', function ($resource) {
    $app = app();
    $controller = $app->make('\App\Http\Controllers\'. ucfirst($resource) . 'Controller');
    return $controller->callAction('findAll', $parameters = array());
 });
});

但同样,我真的不认为这是一个好主意。


推荐阅读