Laravel - 多条路线

Laravel - multiple routes

我正在做一个简单的项目。我希望它尽可能小,所以我尝试创建一个系统,我可以在其中创建页面并将它们放置在 localhost/{page?}

但是,问题来了。我还希望定义一些路由(例如路由 /blog),如下所示。

Route::get('/{page?}', ['as' => 'root', 'uses' => 'SiteController@getRoot']);

Route::get('blog/{slug?}', ['as' => 'blog.post', 'uses' => 'BlogController@getPost']);
Route::get('blog/page/{page}', ['as' => 'blog.page', 'uses' => 'BlogController@getPage'])->where('page', '[0-9]+');

使用此设置,它仅使用第一条路线。

我的问题是。有没有办法做到这一点?或者,这是否超出了 Laravel 的能力范围?

感谢您的帮助。

是的,将您的第一条路线作为最后一条路线。这样它就会最后被捡起来。您可能还需要将 blog/{slug?} 放在那个之前,因此 blog/slug/{page} 是第一个。

Route::get('blog/page/{page}', ['as' => 'blog.page', 'uses' => 'BlogController@getPage'])->where('page', '[0-9]+');

Route::get('blog/{slug?}', ['as' => 'blog.post', 'uses' => 'BlogController@getPost']);

Route::get('/{page?}', ['as' => 'root', 'uses' => 'SiteController@getRoot']);

基本上发生的事情是最基本的路线选择其他路线,因为没有理由不这样做,并且它在技术上与路线匹配,即使它不是您想要的路线。将最具体的路线放在第一位通常可以解决这个问题。

尝试重新排序:

Route::get('blog/page/{page}', ['as' => 'blog.page', 'uses' => 'BlogController@getPage'])->where('page', '[0-9]+');

Route::get('blog/{slug?}', ['as' => 'blog.post', 'uses' => 'BlogController@getPost']);

Route::get('/{page?}', ['as' => 'root', 'uses' => 'SiteController@getRoot']);

否则他们会得到 "overwritten"