何时在Laravel 5 auth trait中设置redirectPath属性

时间:2015-05-24 15:29:28

标签: laravel laravel-5

在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课程中设置两个不同的属性:redirectPathredirectToredirectPath优先于redirectTo

当我想更改默认页面以重定向到/home/时,我认为最好设置redirectTo属性。 redirectPath属性的用途是什么?

2 个答案:

答案 0 :(得分:5)

我在这些属性和redirectPath()函数上挖掘了一些历史记录。

2014年11月30日

重定向在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);

2014年12月1日

添加了

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';

2015年2月7日

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你最终会想到错误的原因以及为什么你的控制器会将你重定向到不同的路径。