Laravel 5 过滤后重定向到上一个根目录

Laravel 5 redirect to previous root after filters

我运行陷入简单的问题,但我还是无法解决。目前我得到了检查用户状态的中间件,如果它是 0 中间件重定向用户选择状态根。那么,在成功选择状态后,我如何将用户重定向到路由,他在哪里被中间件咳嗽了?

我的状态检查中间件:

if (Auth::user()->status == '0') {
    return new RedirectResponse(url('/user/user-status'));
}
return $next($request);

我正在使用 laravel 5。 提前致谢!

您必须使用重定向提供程序。进入这个函数,Laravel 记住了预期的路径。

           if (Auth::user()->status == '0') {
            {
                \Session::flash('flash_message','Please choose a status.');
                return redirect()->guest('/user/user-status');
            }


            return $next($request);

你可以试试这个:

if (Auth::user()->status == '0') {
    return redirect()->guest('/user/user-status');
}
return $next($request);

根据代码文档,redirect()->guest() 这样做:"Create a new redirect response, while putting the current URL in the session."。然后,在您的 "user status" 页面中,您可以在与 Session::get('url.intended')return redirect()->intended('default-route-if-not-set');

的会话中获得预期的 URL

让我们看看使用 Redirect::intended()Redirect::guest()

的选项

Redirect::intended()后面的代码是:

public function intended($default, $status = 302, $headers = array(), $secure = null)
{
        $path = $this->session->get('url.intended', $default);

        $this->session->forget('url.intended');

        return $this->to($path, $status, $headers, $secure);
}

Redirect::guest() 的那个是:

public function guest($path, $status = 302, $headers = array(), $secure = null)
{
    $this->session->put('url.intended', $this->generator->full());

    return $this->to($path, $status, $headers, $secure);
}

基本上,这意味着您可以这样做:

if (!Auth::user()->status) {
    return redirect()->guest('/user/user-status');
}
return $next($request);

然后一旦设置状态的过程完成,您只需 运行:

return redirect()->intended();