Laravel 动态控制器中间件
Laravel dynamic controller 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');
}
然而,这并没有得到尊重,因为我猜这不是一个新的请求。有什么办法可以兑现这个中间件吗?
控制器调度器不是您想要的,因为中间件是控制器之上的一层。您需要运行整个路线:
在你的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());
}
我们的想法是根据请求用它需要做的事情覆盖你的一般路线。这应该只会影响一个请求。
你好,我有一些路由保存在数据库中,每个路由都有自己的控制器和中间件,并且通过这条路由进行路由;
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');
}
然而,这并没有得到尊重,因为我猜这不是一个新的请求。有什么办法可以兑现这个中间件吗?
控制器调度器不是您想要的,因为中间件是控制器之上的一层。您需要运行整个路线:
在你的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());
}
我们的想法是根据请求用它需要做的事情覆盖你的一般路线。这应该只会影响一个请求。