Php 从中间件更改目标控制器/操作

Php 从中间件更改目标控制器/操作,php,laravel,Php,Laravel,我有两个资源/test和/blabla。 对于/test,我已经注册了中间件。在中间件中,基于某些条件,我希望将当前调用重定向到服务于/blabla资源的控制器/操作,对用户透明(没有任何额外的客户端请求,没有302状态响应代码等)。如何实现它?如果您想更改用户的url,我认为除了返回重定向之外没有其他方法。大多数用户没有注意到重定向,因此它可能看起来“透明” 在这种情况下,您的中间件功能如下所示: public function handle($request, Closure $next)

我有两个资源
/test
/blabla

对于
/test
,我已经注册了中间件。在中间件中,基于某些条件,我希望将当前调用重定向到服务于
/blabla
资源的控制器/操作,对用户透明(没有任何额外的客户端请求,没有302状态响应代码等)。如何实现它?

如果您想更改用户的url,我认为除了返回重定向之外没有其他方法。大多数用户没有注意到重定向,因此它可能看起来“透明”

在这种情况下,您的中间件功能如下所示:

public function handle($request, Closure $next)
{
    if (something == thingy) {
        return redirect('/blabla');
    }

    return $next($request);
}

看起来您的解决方案可能更适合路由文件。您建议在特定条件下使用不同的路线

因此,在routes.php文件中:

Route::get('test', function(){
   if($condition){
       return App::make('App\Http\Controllers\TestController')->index();
   } else {
       return App::make('App\Http\Controllers\BlaBlaController')->index();
   }
});
如果您仍然希望在中间件中处理它,您应该能够执行与上面相同的操作:

return App::make($controller)->index(); // or whatever controller method you want to call.

如果您需要调用两组中间件,那么在构造函数内部(调用中间件后)检查您的条件,并像上面那样调用另一个控制器。

@j-t-grimes这就是重点,我不想更改用户将看到的url。我想用另一对控制器/操作(例如,基于额外的http头)为同一url提供帮助。在routes文件中捕获异常,然后针对每种情况选择不同的路由是否有意义?@ajon这不是我想要实现的。我喜欢在
路由中进行更改的想法。php
只需要澄清一些问题(见下文)我喜欢你关于routes.php的想法,但是如果我调用
App::make
是否意味着将跳过中间件?call
App::make
本质上调用了调用中间件的构造函数。在使用
App:make
调用的控制器上,不会跳过中间件。在Lumen中,它的工作方式似乎不同(我在主题中提到了Laravel,因为我认为它们是相同的)。无论如何,谢谢你的主意!始终返回:类不存在(调用控制器类)