Php Laravel-多条路线

Php Laravel-多条路线,php,laravel,routes,Php,Laravel,Routes,我在做一个简单的项目。我希望它尽可能小,所以我尝试创建一个系统,在这个系统中我可以创建页面,它们被放置在localhost/{page?} 但问题是。我还希望定义一些路由(例如路由/blog),如下所示 Route::get('/{page?}', ['as' => 'root', 'uses' => 'SiteController@getRoot']); Route::get('blog/{slug?}', ['as' => 'blog.post', 'uses' =>

我在做一个简单的项目。我希望它尽可能小,所以我尝试创建一个系统,在这个系统中我可以创建页面,它们被放置在
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]+');
使用此设置,它仅使用第一条路线

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


谢谢您的帮助。

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

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

是的,将第一条路线放在最后一条路线上。那样的话,它会最后被捡起来。您可能还需要将
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']);
否则它们会被“覆盖”

请尝试对它们重新排序:

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

否则会被“覆盖”

谢谢。我有点忘了订单可以改变它。谢谢。我有点忘记了顺序可以改变这一点。为了公平起见@user3158900比我早2分钟回答,所以他应该得到接受的答案,他给出了更好的解释。为了公平起见@user3158900比我早2分钟回答,所以他应该得到接受的答案,他给出了更好的解释