2015-06-12 96 views
1

我正在做一个简单的项目。我希望它尽可能小,所以我试图创建系统,我可以创建页面,并将它们放在localhost/{page?}Laravel - 多条路线

但是,这里是问题所在。我也想要定义一些路线(例如路线/blog),如下所示。

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

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

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

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

谢谢你的帮助。

回答

3

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

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

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

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

基本上会发生什么是最基本的途径是拿起其他路线,因为没有理由为它不,它在技术上即使它不是你想要的路由的路由相匹配。把最具体的路线首先通常处理这个问题。

+0

谢谢。我有点忘记了顺序可以改变这一点。 – Aadam

+0

有一个upvote先生 – haakym

2

尝试重新安排他们:

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

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

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

否则他们得到 “覆盖”

+1

为了公平@ user3158900回答2分钟前,所以他应该得到接受的答案,他给了一个更好的解释 – haakym