重定向到预期的 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
我认为您必须在预期的方法中指定路由名称,而不是 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
您的选择是:
- 检查 Laravel 的(Symfony 的?)实现并将其放入您自己的代码中
- 完全编写您自己的实现 - 一种超级简单的方法是将请求 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,顺便说一句,这是一个很棒的框架。 :)
我正在构建一个带有简单 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
我认为您必须在预期的方法中指定路由名称,而不是 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
您的选择是:
- 检查 Laravel 的(Symfony 的?)实现并将其放入您自己的代码中
- 完全编写您自己的实现 - 一种超级简单的方法是将请求 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,顺便说一句,这是一个很棒的框架。 :)