重定向到预期的 URL Lumen

Redirect to intended URL Lumen

我正在构建一个带有简单 API 和身份验证的小 Lumen 应用程序。

我想将用户重定向到预期的 URL,如果他自己访问 /auth/login,我希望他重定向到 /foo

Laravel Docs中有这个函数:return redirect()->intended('/foo');

当我在我的路线中使用它时,我在服务器日志中收到一条错误消息:

[30-Apr-2015 08:39:47 UTC] PHP Fatal error:  Call to undefined method Laravel\Lumen\Http\Redirector::intended() in ~/Sites/lumen-test/app/Http/routes.php on line 16

我认为这是因为 LumenLaravel 的较小版本,也许这个功能还没有实现。

我认为您必须在预期的方法中指定路由名称,而不是 URI:

return redirect()->intended('foo');

假设您已经为路线命名,我认为这仍然有效:

return Redirect::intended('/foo');

更新: 试试这个: 检索请求的 URI :

$uri = Request::path(); // Implemented in Lumen

然后重定向到请求的 URI :

return redirect($uri);

这可行!!

看了一下Lumen的源码确实没有实现: https://github.com/laravel/lumen-framework/blob/5.0/src/Http/Redirector.php

您的选择是:

  1. 检查 Laravel 的(Symfony 的?)实现并将其放入您自己的代码中
  2. 完全编写您自己的实现 - 一种超级简单的方法是将请求 URL 存储在会话中,重定向到登录页面,当用户成功登录时检索 URL 从会话中重定向他

我通过稍微调整我的中间件以及在会话中存储 Request::path() 来解决这个问题。

这是我的中间件的样子:

class AuthMiddleware {

    public function handle($request, Closure $next) {
        if(Auth::check()){
            return $next($request);
        } else {
            session(['path' => Request::path()]);
            return redirect('/auth/login');
        }
    }
}

在我的 routes.php 中,我有这条路线(我会尽快外包给控制器)​​:

$app->post('/auth/login', function(Request $request) {
    if (Auth::attempt($request->only('username', 'password'))){
        if($path = session('path')){
            return redirect($path);
        } else {
            return redirect('/messages');
        }
    } else {
        return redirect()->back()->with("error", "Login failed!");
    }
});

感谢 IDIR FETT 建议使用 Request::path() 方法。
希望这会帮助一些新手 Lumen,顺便说一句,这是一个很棒的框架。 :)