首页 > 解决方案 > 动态路由怎么可能

问题描述

我想在 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。但是,仍然应该可以调用 imprint 控制器。

这怎么可能实现?

感谢帮助。

标签: laravelroutes

解决方案


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

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。


推荐阅读