【问题标题】:Laravel: How do I make route helper return urls with trailing slashes?Laravel:如何使路由助手返回带有斜杠的 URL?
【发布时间】:2017-04-20 20:21:21
【问题描述】:

如何让 Laravel 5.3 创建带有斜杠的路由 URL?

路由定义为

 Route::get('/home/', ['as' => 'home', 'uses' => 'HomeController@index']);

然后我在视图中使用路由辅助函数创建 url:

{{ route('home') }}

这会创建http://localhost:8000/home 而不是http://localhost:8000/home/

这个问题与Laravel - append a trailing slash in routes 非常相似,但这个问题也没有答案,而且在我看来我的描述要短一点。

编辑: 文档中的两种可能的命名方法没有区别:

Route::get('/home/', ['as' => 'home', 'uses' => 'HomeController@index']);
Route::get('/home/', 'HomeController@index')->name('home');

【问题讨论】:

  • 当您访问带有斜杠的那个时会发生什么? afaik 它将重定向到其他地方。它的解决方案之一是this so answer
  • 只要网络服务器不重定向 laravel 就会响应请求。
  • 这与.htaccess 有关。正如在this question 中讨论的那样,您必须在公共目录中编辑您的.htaccess。虽然...in a certain discussion
  • 我深入了解了UrlGenerator,并为此考虑扩展它,即更改其format() 方法,该方法去除了斜杠。不幸的是,我意识到 Laravel 对它不够灵活,所以不可能用花哨的方式来做。 Laravel 甚至在注册 UrlGenerator 本身之后,在运行时就在 UrlGenerator 上注册了一些魔法。老实说,这个功能设计得很糟糕。因此,您唯一的机会是创建自己的助手(或覆盖现有的 route() 助手)。

标签: php laravel laravel-5


【解决方案1】:

标记的变体更像是拐杖而不是决定,因为 URL 在 sitemap.xml 中并且仍然在任何地方,因此在这种情况下,最好只编辑目录中的所有内容 routes/*.php,这都是一样的,UrlGenerator census 的变体将是最正确的。在这种情况下,有一个非常有用的package (illuminatech/url-trailing-slash) 基本上应该可以解决这个问题。所有更改将仅在路由级别。

【讨论】:

    【解决方案2】:

    因为 Laravel 会删除 URL 末尾的斜杠,所以你只需使用 {{ route('home') }}/ 即可。

    参考:https://github.com/laravel/framework/blob/5.3/src/Illuminate/Routing/UrlGenerator.php#L308-L345

    【讨论】:

    猜你喜欢
    • 2018-01-01
    • 2015-09-07
    • 1970-01-01
    • 2017-09-16
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多