我正在建立一个新的路线系统。
Route::get('/{cat1Url}', 'CategoryController@showCat1')->name('showCat1');
Route::get('/{productUrl}', 'ProductController@showProduct')->name('showProduct');
我的sef链接在“ /”之后 但是
{{ route('showProduct',[$p->pr_url]) }}
此方法不适用于路线名称。仅适用于上行路线。
我不想使用 “ / cat / myVariable” 要么 “ / product / myVariable”
我不能使用路由名称来工作吗? 有什么解决方案? 谢谢大家!
答案 0 :(得分:0)
通过这种方式,如果您向/something
幼虫发出get请求,那么您将从web.php文件的顶部开始,寻找遵循该模式的路由。您的两条路线都将遵循该模式,但是幼虫将始终将第一个传递给控制器。
您有两种选择:
仅放置一条路径,然后在控制器内部切换到适当的功能。但这不是一个伟大的想法,因为这是Web.php的功能。
使用类似文档建议的路线:
Route::get('/cat/{catId}', 'CategoryController@showCat')->name('showCat');
Route::get('/prod/{productId}', 'ProductController@showProduct')->name('showProduct');
,然后在Controller中为类别或产品设置适当的处理程序。
答案 1 :(得分:0)
您将必须有一种方法来告诉Laravel将哪个URL映射到什么,否则它将始终使用最后定义的路由。因此,在您调用/myVariable
和/myVariable
的情况下,它将使用最新的定义showProduct
。唯一的其他方法是使用正则表达式来区分变量。例如:
Route::get('/{cat1Url}', 'CategoryController@showCat1')
->name('showCat1')->where('cat1Url', 'cat-*');
Route::get('/{productUrl}', 'ProductController@showProduct')
->name('showProduct')->where('productUrl', 'prod-*');
这样,您的子弹需要从定义的内容开始,但是您不能仅将id
用作两者的数值。