php - 如何在 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';
});
});
解决方案
您返回一个字符串而不是调用控制器操作:我相信 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());
});
});
但同样,我真的不认为这是一个好主意。