【问题标题】:When to use: redirect('/') vs. redirect()->route('home') vs. redirect()->home()?何时使用:redirect('/') vs.redirect()->route('home') vs.redirect()->home()?
【发布时间】:2018-04-07 00:54:58
【问题描述】:

当我有这条命名路线时:
Route::get('/', 'IndexController@index')->name('home');

然后在任意Controller的任意action方法中;当我需要重定向到命名路由 home 时;这些语句中的任何一个都正确地重定向到预期的路线:

return redirect('/');
return redirect()->route('home');
return redirect()->home();

什么时候使用它们?
有什么区别?
使用其中一个有什么好处吗?

【问题讨论】:

  • 这是做同一件事的所有不同方式。使用任何你喜欢的。命名路由方法有利于可维护性,因为如果您决定稍后更改路由,您只需要在一个地方进行,路由文件或文件夹取决于您使用的 Laravel 版本。

标签: php laravel redirect routes


【解决方案1】:
redirect('/')

它将您重定向到基本 URL。

redirect()->route('home')

重定向到名为 home 的路由。 查看更多关于命名路由here

 redirect()->home();

重定向到命名路由的另一种方法。也重定向到“home”路由。它的作用与上述相同,但语法略有不同。

我更喜欢命名路由而不是原始 URL,因为如果您决定稍后更改 URL,则只需更改路由文件即可。

【讨论】:

  • redirect()->home() 不是重定向到命名路由的通用方式。这是一个非常具体的快捷方式,仅适用于名为home 的路线。我已在答案中链接到它的源代码。
【解决方案2】:

正如documentation 提到的那样:

当你调用不带参数的重定向助手时,一个实例 Illuminate\Routing\Redirector 返回,允许你调用任何 重定向器实例上的方法。例如,要生成一个 RedirectResponse 到一个命名路由,你可以使用 route 方法

正如您在 API 方法(下面的链接)中看到的,您可以使用很多方法,还有一个特定的辅助方法 home() 它只是 redirect()->route('home ') 由@ceejayoz 突出显示。

现在我们将讨论return redirect('/');return redirect()->route('home');,正如你所说,他们两个正确地重定向到预期的路线但是如果将来,第二个真的很有用。

为什么?

因为如果您想更改路由文件中的 URL 结构,您只需要更改路由即可:

Route::get('/', 'IndexController@index')->name('home');

将是:

Route::get('/home_page', 'IndexController@index')->name('home');

所有重定向都会引用该路由,您无需更改任何其他内容 => 所有重定向仍然可以正常工作。

但是

如果您选择使用第一个(我的意思是return redirect('/');),那么在更改路由之后,您需要解析所有控制器以检查是否有一些重定向使用然后更改的路由并更改它们: p

【讨论】:

    【解决方案3】:

    当您传递一个字符串时,它会将用户重定向到域以及您传递的字符串。

    http://localhost:3000 + 字符串

    如果您忘记了它,它还会添加 /,现在如果您像以前一样命名您的路线,那么您可以通过名称来调用它。
    使用命名路由的一个优点是,如果您想更改 URI,您可以这样做,而不必担心更改视图中的一堆 ahref、控制器中的重定向等。 home() 是 Laravel 的 Redirectorredirect() 中的一个方法,所以我认为你不能只调用命名路由作为方法。

    【讨论】:

      【解决方案4】:

      redirect()->home() 只是redirect()->route('home') 的快捷方式。源码可见here

      出于可维护性目的,命名路由通常优于原始 URL。 home 路径不太可能改变位置,但 你可能会在子文件夹中托管 Laravel 应用程序,或者将主页从 / 移动到 /app为根目录下的营销登陆页面腾出空间。

      【讨论】:

      • TL;DR:在这个具体的例子中并不重要。
      猜你喜欢
      • 2012-06-04
      • 2023-03-04
      • 1970-01-01
      • 2018-11-17
      • 2018-12-26
      • 2020-07-13
      • 1970-01-01
      • 2012-02-23
      • 1970-01-01
      相关资源
      最近更新 更多