在Laravel默认AuthenticatesAndRegistersUsers
类使用的AuthController
特征中,使用以下代码:
return redirect()->intended($this->redirectPath());
redirectPath()
功能如下:
public function redirectPath()
{
if (property_exists($this, 'redirectPath'))
{
return $this->redirectPath;
}
return property_exists($this, 'redirectTo') ? $this->redirectTo : '/home';
}
阅读此代码,我可以在AuthController
课程中设置两个不同的属性:redirectPath
和redirectTo
。 redirectPath
优先于redirectTo
。
当我想更改默认页面以重定向到/home
到/
时,我认为最好设置redirectTo
属性。 redirectPath
属性的用途是什么?
答案 0 :(得分:5)
我在这些属性和redirectPath()
函数上挖掘了一些历史记录。
重定向在AuthenticatesAndRegistersUsers
特征中进行了原始硬编码。
https://github.com/laravel/framework/commit/cc1c35069a7bbc3717487d931fbd80b8e6641a90
+ return redirect('/home');
重定向更改为redirect($this->redirectTo)
https://github.com/laravel/framework/commit/a71926653a573f32ca7a31527c7644c4305c1964#diff-b72935cc9bfd1d3e8139fd163ae00bf5
- return redirect('/home');
+ return redirect($this->redirectTo);
redirectPath()
功能
https://github.com/laravel/framework/commit/dd78c4fe763859d11e726477125b7d1a00c860c0#diff-b72935cc9bfd1d3e8139fd163ae00bf5
+ public function redirectPath()
+ {
+ return property_exists($this, 'redirectTo') ? $this->redirectTo : '/home';
+ }
重定向更改为redirect($this->redirectPath())
- return redirect($this->redirectTo);
+ return redirect($this->redirectPath());
同时,AuthController
中的属性已被删除
https://github.com/laravel/laravel/commit/57a6e1ce7260444719dd3de1fdd7c58cdcdba362
- protected $redirectTo = '/home';
redirectPath
属性已添加到redirectPath()
函数中:
https://github.com/laravel/framework/commit/63a534a31129be4cec4f5a694342d7020e2d7f07#diff-b72935cc9bfd1d3e8139fd163ae00bf5
public function redirectPath()
{
+ if (property_exists($this, 'redirectPath'))
+ {
+ return $this->redirectPath;
+ }
return property_exists($this, 'redirectTo') ? $this->redirectTo : '/home';
}
看起来正确使用的属性是redirectPath
,因为它与redirectPath()
函数一致。它还旨在覆盖可能已添加的任何旧redirectTo
属性。
答案 1 :(得分:0)
我相信,因为AuthenticatesAndRegistersUsers
是一个特征,并且可以被不同的类使用,所以两个属性检查都是为了向后兼容不同的类,但逻辑具有相同的目的。
一般情况下,我建议您使用redirectPath
属性,因为它是该函数中的第一个条件,如果由于任何原因您不注意并使用扩展另一个控制器的控制器中的redirectTo
属性已经定义redirectPath
你最终会想到错误的原因以及为什么你的控制器会将你重定向到不同的路径。