Laravel - 多条路线

时间:2015-06-12 21:19:49

标签: php laravel 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的能力?

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

是的,将您的第一条路线作为最后一条路线。这样它最后会被拿起来。您可能还需要在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']); 是第一位。

{{1}}

基本上发生的事情是最基本的路线是接收其他路线,因为没有理由不这样做,并且它在技术上匹配路线,即使它不是你想要的路线。首先放置最具体的路线通常可以解决这个问题。

答案 1 :(得分:2)

尝试重新排序:

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']);

否则他们会被覆盖"