Laravel 路线排序

Laravel Routes ordering

我正在项目中使用 Laravel 4.2。

我已经为 :

设置了路线

slug, 类别, 服务

在排序方面,如果我将服务移动到 slug 上方,它找不到 slug 并最终转到服务控制器,同样,如果我将 slug 方法保留在服务上方。它也找不到。

我目前的路线如下:

Route::get('{slug?}', 'HomeController@index');
Route::get('{category?}', 'HomeController@category');
Route::get('{services?}', 'ServicesController@index');

有没有办法解决这个问题,第一类工作正常,但切换 slug 和服务会产生问题。

谢谢

他们用你写路由的方式,Laravel 无法告诉哪个请求应该去哪条路由,因为你用一个可选参数写了三个路由,这个参数可以是任何东西。 路由的工作方式是:它应用与模式匹配的第一条路由。这就是为什么当它遇到第一个说 "one param that can be anything" 的路线模式时,它会选择那条路线。

你应该给 Laravel 一些提示,例如:

Route::get('{slug?}', 'HomeController@index')->where('slug', '(blog|home|contact)');

Route::get('/category/{category?}', 'HomeController@category');

Route::get('/services/{services?}', 'ServicesController@index');

如果您限制可能的值或者如果您在 URL 中添加额外的部分,Laravel 将能够识别哪个路由应该去哪个处理程序。

看看 docs 以获得更多想法