重定向到预期的 URL 流明
Posted
技术标签:
【中文标题】重定向到预期的 URL 流明【英文标题】:Redirect to intended URL Lumen 【发布时间】:2015-07-09 21:34:21 【问题描述】:我正在使用简单的 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
我认为这是因为Lumen 是Laravel 的更小版本,并且可能还没有实现这个功能。
【问题讨论】:
也许你可以使用命名路由:lumen.laravel.com/docs/routing#named-routes 问题是,tented() 方法在 Lumen 中不起作用:/ 【参考方案1】:我认为您必须在预期的方法中指定路由名称,而不是 URI:
return redirect()->intended('foo');
假设您已经命名了路线,我认为这仍然有效:
return Redirect::intended('/foo');
更新: 尝试这个: 检索请求的 URI:
$uri = Request::path(); // Implemented in Lumen
然后重定向到请求的 URI:
return redirect($uri);
这可以工作!
【讨论】:
不幸的是,这不起作用,我已经尝试过这种方式解决问题。 试试 Request::path();【参考方案2】:确实查看了 Lumen 的源代码,它没有实现: https://github.com/laravel/lumen-framework/blob/5.0/src/Http/Redirector.php
您的选择是:
-
检查 Laravel(Symfony 的?)实现并将其放入您自己的代码中
完全编写您自己的实现 - 一种超级简单的方法是将请求 URL 存储在会话中,重定向到登录页面,当用户成功登录时,从会话中检索 URL 并重定向他
【讨论】:
谢谢,我已经想到了,但我想在我自己做之前确定它没有实现。 :)【参考方案3】:我通过稍微调整中间件以及在会话中存储 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,顺便说一句,这是一个很棒的框架。 :)
【讨论】:
您可以避免使用 Facades,方法是使用$request->path()
表示请求并在您的构造函数中:public function __construct(Guard $auth) $this->auth = $auth;
表示 Auth。以上是关于重定向到预期的 URL 流明的主要内容,如果未能解决你的问题,请参考以下文章
允许重定向到不在 htdocs 中的 URL (XAMPP)