Laravel动态控制器中间件

时间:2019-03-25 10:04:56

标签: laravel middleware

嗨,所以我有一些路由保存在数据库中,每个路由都有其自己的控制器及其中间件,并通过此路由进行路由;

Route::get('{any}', 'RoutingController@index')->where('any', '.*');

,然后尝试按以下方式创建新的控制器;

$container = app();
$route = $container->make(\Illuminate\Routing\Route::class);
$controllerInstance = $container->make($controller);
return (new ControllerDispatcher($container))->dispatch($route, $controllerInstance, $action);

所以我的HomeController在这里有一个中间件;

public function __construct()
{
    $this->middleware('guest');
}

但是,由于我猜这不是一个新的要求,因此无法兑现。有什么办法可以兑现这个中间件?

1 个答案:

答案 0 :(得分:1)

控制器调度程序不是您想要的,因为中间件位于控制器上方。您需要运行整个路线:

在您的RoutingController

public function index() {
     //Override your route with what it really needs to do
     $route = Route::get(
         {any},
         '\App\Http\Controllers\HomeController@index'
    )->where('any', '.*');
    //Re-handle the request. It should hit your new route.
    app()->make(\Illuminate\Contracts\Http\Kernel::class)->handle(request());
}

这个想法是您根据请求将您需要执行的常规路由覆盖掉。这只会影响单个请求。

相关问题