【问题标题】:Laravel 5.5 routing issueLaravel 5.5 路由问题
【发布时间】:2018-05-04 10:16:55
【问题描述】:

我在 laravel 5.5 中的路线有这个奇怪的问题,每次我尝试打开我的一条路线时,我都会收到 404 错误

抱歉,找不到您要查找的页面。

所以我必须将这条路线移到我的 web.php 文件之上,这在实时应用中是不可能的。

据我所知,我的路由在我的 web.php 文件中没有任何功能,并且我的所有路由都引用控制器。

我试过php artisan route:cach,我得到了这个错误:

λ php artisan route:cach
Route cache cleared!

In Route.php line 880:

  Unable to prepare route [api/user] for serialization. Uses Closure.

有什么想法吗?

【问题讨论】:

  • 该错误仅表示您在 api.php 路由中有一个名为 User 的闭包。这意味着它不能被缓存,但如果路由仍然有效,则不是问题。您可以发布整个 web.php,以及您尝试过返回 404 的示例 URL 吗? (此处关闭评论:github.com/laravel/framework/issues/7319#issuecomment-73362932
  • 发布的工匠错误与您的 api.php 路由文件有关,但您的 web.php 路由有问题。因此,如果您的 API 路由正常工作,您可以忽略该错误。我已经在下面发布了您的 web.php 问题的答案。

标签: php laravel laravel-5


【解决方案1】:

有问题的路由是 FrontendController@showpage 路由吗?如果是这样:

// Show single product
Route::get('/{productslug}', 'frontend\FrontendController@showproduct')->name('showproduct')->where('productslug', '[\w\d\-\_]+');
// Show single page
Route::get('/{slug}', 'frontend\FrontendController@showpage')->name('showpage')->where('slug', '[\w\d\-\_]+');

这两个路由似乎有冲突,因为它们具有相同的 where() 子句,这意味着路由无法区分它们。

解决方案取决于 {slug} 和 {productslug} 之间的区别。目前,您只是在说单词、数字、连字符和下划线的任意组合。

如果你不能用正则表达式区分它们,你应该创建一个新的路由,但这显然会改变 URL。

// Show single product
Route::get('/product/{productslug}', 'frontend\FrontendController@showproduct')->name('showproduct')->where('productslug', '[\w\d\-\_]+');

【讨论】:

  • 解决办法是什么?
  • 就其正则表达式而言,slug 和 product slug 有什么区别?
  • slug 用于展示页面,product slug 用于展示产品详情
  • 如果你不能用正则表达式区分它们,那么 Laravel 也不能。所以我建议你在 /product/{productslug} 为产品创建一个新的 URL,或者如果你想让它不那么明显,你可以做 '/p/{productslug}' 甚至 '/{productslug}/p'
猜你喜欢
  • 1970-01-01
  • 2018-02-26
  • 2018-10-18
  • 2018-08-05
  • 2018-06-23
  • 2019-04-02
  • 2018-03-01
  • 2014-08-14
  • 2018-11-20
相关资源
最近更新 更多