Laravel动态控制器中间件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel动态控制器中间件相关的知识,希望对你有一定的参考价值。

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

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

我尝试按如下方式创建新控制器;

$container = app();
$route = $container->make(IlluminateRoutingRoute::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},
         'AppHttpControllersHomeController@index'
    )->where('any', '.*');
    //Re-handle the request. It should hit your new route.
    app()->make(IlluminateContractsHttpKernel::class)->handle(request());
}

我们的想法是根据请求覆盖您需要做的事情的一般路线。这应该只影响单个请求。

以上是关于Laravel动态控制器中间件的主要内容,如果未能解决你的问题,请参考以下文章

laravel 5 的动态中间件

如何设置 Laravel 中间件的执行顺序?

Express实战 - 应用案例- realworld-API - 路由设计 - mongoose - 数据验证 - 密码加密 - 登录接口 - 身份认证 - token - 增删改查API(代码片段

Laravel5.1 路由 -路由分组

如何将控制器中的 Laravel 4.2 beforeFilter 转换为 Laravel 5.2 中的自定义中间件

我的 POST ajax 请求在 Laravel 控制器上返回 302