路线中的产品和类别分离(Laravel)

时间:2019-04-13 14:29:53

标签: laravel routes

我正在建立一个新的路线系统。

Route::get('/{cat1Url}', 'CategoryController@showCat1')->name('showCat1');

Route::get('/{productUrl}', 'ProductController@showProduct')->name('showProduct');

我的sef链接在“ /”之后 但是

{{ route('showProduct',[$p->pr_url]) }}

此方法不适用于路线名称。仅适用于上行路线。

我不想使用 “ / cat / myVariable” 要么 “ / product / myVariable”

我不能使用路由名称来工作吗? 有什么解决方案? 谢谢大家!

2 个答案:

答案 0 :(得分:0)

通过这种方式,如果您向/something幼虫发出get请求,那么您将从web.php文件的顶部开始,寻找遵循该模式的路由。您的两条路线都将遵循该模式,但是幼虫将始终将第一个传递给控制器​​。 您有两种选择:

  1. 仅放置一条路径,然后在控制器内部切换到适当的功能。但这不是一个伟大的想法,因为这是Web.php的功能

  2. 使用类似文档建议的路线:

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用作两者的数值。