我正在做一个简单的项目。我希望它尽可能小,所以我尝试创建系统,我可以创建页面,并将它们放在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的能力?
感谢您的帮助。
答案 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']);
否则他们会被覆盖"