【问题标题】:Create dynamic routes in Laravel在 Laravel 中创建动态路由
【发布时间】:2020-07-17 09:57:02
【问题描述】:

我正在开发电子商务网站,卡在导航栏中,我创建了类似这样的路线:

Route::get('/category/{slug}', 'Site\CategoryController@show')->name('category.show');

在 slug 中,我通过了 Product 的 slug,

但我想改变这样的东西

 Route::get('/{slug}/{slug}', 'Site\CategoryController@show')->name('category.show');

我想删除类别前缀并将主类别 slug 作为第一个参数传递,如果它作为第二个参数存在则传递子类别,否则它将为空。

我正在使用 TypiCMS 的另一件事是,用于创建可嵌套菜单并且它正在工作,我必须对其进行修改以使用动态路由。

【问题讨论】:

    标签: laravel laravel-5


    【解决方案1】:

    抱歉,我对您的 cms 框架一无所知,但在 Laravel 中,您不能为路由中的两个绑定使用相同的名称,它们都必须是唯一的。

    Route::get('/{categoyrySlug}/{subcategorySlug}', 'Site\CategoryController@show')->name('category.show');
    

    Site\CategoryController 你应该可以使用:

    public function show($categorySlug, $subcategorySlug){
        ...
    }
    
    

    然后相应地处理它们。

    【讨论】:

    • 感谢您的回答。我得到:缺少 [Route: category.show] [URI: {categorySlug}/{subcategorySlug}] 所需的参数,但我也传递了第二个参数 {{ route('category.show', $item->slug, $sub_item->slug) }} 有时当子类别不存在时,我可以将 NULL 作为第二个参数传递
    • 除非 TypiCrm 搞砸了默认路由模型绑定,否则您似乎在某个变量中缺少一个 slug,我会仔细检查这些 slug。但是要在实际单击链接之前验证我的代码在视图级别上是否有效,您可以对两个已知的 slug 进行硬编码,例如 {{ route('category.show', 'known-slug', 'other-known-slug') } } 因为我相信这应该会奏效。
    • 哦,你说得对,我自己总是忘记将它们作为数组传递,至少我们得到了你。恭喜!
    • 如果我想让第二个参数,即 $subcategorySlug 可选,我已经将 null 传递给第二个参数 $subcategorySlug=null 但它没有找到路线
    • 在可选参数后添加?,如下所示:Route::get('/{categoyrySlug}/{subcategorySlug?}', 'Site\CategoryController@show')->name('category.show');
    猜你喜欢
    • 1970-01-01
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    • 2018-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多