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"
我正在做一个简单的项目。我希望它尽可能小,所以我尝试创建一个系统,我可以在其中创建页面并将它们放置在 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"