如何执行"内部"在Laravel 5.3中重定向

时间:2016-12-17 05:49:18

标签: php laravel laravel-5

我了解如何使用redirect()方法重定向用户,但此方法返回302代码,浏览器必须发出第二个HTTP请求。是否可以在内部将请求转发给其他控制器和操作?

我在中间件中执行此检查,因此我的句柄功能如下所示:

public function handle($request, Closure $next)
  {
    if (auth()->user->age <= 20) { //example
        //internally forward the user to a different controller@action
    }

    return $next($request);
  }

}

2 个答案:

答案 0 :(得分:3)

您可以使用call方法:

app()->call('App\Http\Controllers\ControllerName@funName')

或者

app('App\Http\Controllers\ControllerName')->funName();

所以你的中间件看起来像:

if (auth()->user->age <= 20) {
   return app()->call('App\Http\Controllers\ControllerName@action');
}

答案 1 :(得分:-2)

您可以使用redirect()这样的辅助方法:

public function handle($request, Closure $next)
{
  if (auth()->user->age <= 20) { //example
      return redirect()->route('some_route_name');
  }

  return $next($request);
}

在路线文件中,路线应定义为:

Route::get('users/age/', 'ExampleController@method_name')->name('some_route_name');

希望这有帮助!