San*_*yal 14 php laravel laravel-5.3
在LoginController中登录后,我们可以覆盖此属性以重定向用户:
protected $redirectTo = '/home';
Run Code Online (Sandbox Code Playgroud)
以下是文档中的声明:
如果重定向路径需要自定义生成逻辑,则可以定义redirectTo方法而不是redirectTo属性:
受保护的函数redirectTo(){
//}
但它总是重定向到'/home';任何条件.
protected function redirectTo()
{
if (Auth::user()->role==0) {
return '/volunteer';
} else {
return '/donor';
}
}
Run Code Online (Sandbox Code Playgroud)
如果存在方法,它将使用它,否则将使用该属性.但即使方法存在,它看起来似乎正在使用属性.
但是覆盖authenticated()或sendLoginResponse()功能正常.
protected function authenticated()
{
if (Auth::user()->role==0) {
return redirect('/volunteer') ;
} else {
return redirect('/donor');
}
}
Run Code Online (Sandbox Code Playgroud)
redirectTo()方法有什么问题?这是这些方法的GitHub源代码.
我正在使用Laravel版本5.3.28.
San*_*yal 11
这是Laravel v5.3.28redirectPath()中src/Illuminate/Foundation/Auth/RedirectsUsers.php中的方法
public function redirectPath()
{
return property_exists($this, 'redirectTo') ? $this->redirectTo : '/home';
}
Run Code Online (Sandbox Code Playgroud)
在5.3.29及以上版本的后续版本中.这已在提交文件中更改:
public function redirectPath()
{
if (method_exists($this, 'redirectTo')) {
return $this->redirectTo();
}
return property_exists($this, 'redirectTo') ? $this->redirectTo : '/home';
}
Run Code Online (Sandbox Code Playgroud)
因此,这部分文档仅适用于Laravel 5.3.29及更高版本
如果重定向路径需要自定义生成逻辑,则可以定义redirectTo方法而不是redirectTo属性:
受保护的函数redirectTo(){//}
v5.3.28的解决方案
要使redirectTo()方法在v5.3.28中工作,请redirectPath()在src/Illuminate/Foundation/Auth/RedirectsUsers.php 中的方法中手动添加它.
if (method_exists($this, 'redirectTo')) {
return $this->redirectTo();
}
Run Code Online (Sandbox Code Playgroud)
简单解决方案
覆盖redirectPath()而不是redirectTo().
使用原始字符串返回:
protected function redirectPath()
{
if (Auth::user()->role==0) {
return '/volunteer';
} else {
return '/donor';
}
}
Run Code Online (Sandbox Code Playgroud)
或者超越redirectPath()Laravel 5.3.29 redirectPath()版本然后你的redirectTo()方法将工作.
public function redirectPath()
{
if (method_exists($this, 'redirectTo')) {
return $this->redirectTo();
}
return property_exists($this, 'redirectTo') ? $this->redirectTo : '/home';
}
Run Code Online (Sandbox Code Playgroud)
为什么redirectTo()不起作用
在干净的Laravel v.5.3.29 +默认Auth上测试覆盖redirectPath()或redirectTo()方法App\Http\Controllers\Auth\LoginController.php,它们按预期工作.
redirectTo()方法的例子
文件说:
如果重定向路径需要自定义生成逻辑,则可以定义redirectTo方法而不是redirectTo属性.
所以函数需要看起来像这样:
protected function redirectTo()
{
if(condition) {
return "/your/path";
}
return "/your/secondpath";
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9572 次 |
| 最近记录: |