我想在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。 但是,仍然应该可以,例如,调用压印控制器。
这怎么实现?
感谢帮助。
答案 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。