如何进行动态路由

时间:2019-12-05 09:55:36

标签: laravel routes

我想在Laravel 6.x中获得动态路由功能

Route::get('/', 'HomeController@index')->name('home');
Route::get('/{code}', 'DetailController@detail1')->name('detail1');
Route::get('/impress', 'ImpressController@index')->name('impress');

如果URL包含4位数字的代码,则应调用DetailController @ detail1。 如果URL包含8或9位数字的代码,则应调用DetailController @ detail2。 但是,仍然应该可以,例如,调用压印控制器。

这怎么实现?

感谢帮助。

1 个答案:

答案 0 :(得分:2)

您应该使用正则表达式来定义对参数的约束:

Route::get('/{code89}', 'DetailController@detail1')->where('code89', '[0-9]{8,9}')->name('detail2');
Route::get('/{code4}', 'DetailController@detail1')->where('code4', '[0-9]{4}')->name('detail1');

请参阅:https://laravel.com/docs/6.x/routing#parameters-regular-expression-constraints

按此顺序定义它们,否则detail1将始终被匹配,而不是detail2。