Laravel多嵌套相同的路由参数

时间:2016-08-22 20:00:45

标签: laravel laravel-5.2 laravel-routing

我在Laravel 5.2上创建了internet-marketn 需要做类似slug的网址中的breadcrumps,

喜欢这样

/目录/ {category_1} / {category_2} / {category_n}

但只获取最后一个参数并将其绑定到Model

此外,最后一个类别可以有产品slug和路线可以像

/目录/ {category_1} / {category_2} / {category_n} /产品/ {product_slug}

我的路线

    Route::group(['prefix' => 'catalog'], function () {
    Route::get('/', ['as' => 'shop_catalog', 'uses' => 'CatalogController@catalog']);

    Route::group(['prefix' => '{category}'], function () {
        Route::get('/', ['as' => 'shop_show_category', 'uses' => 'CategoryController@category']);

        Route::group(['prefix' => 'product/{product}'], function () {
            Route::get('/', ['as' => 'shop_show_product', 'uses' => 'ProductController@product']);
});

尝试在RouteServiceProvider中写入模式,如

$route->pattern('category', '.*');

然后由' /'爆炸并获取绑定的最后一个元素。但无法获得产品参数。

我该怎么做这个逻辑?

1 个答案:

答案 0 :(得分:0)

路线的排序非常重要。

首先列出shop_show_category路由,路由器永远不会检查该网址是否更具体地与您的shop_show_product路由匹配。

Route::group(['prefix' => '{category}'], function () {
    Route::group(['prefix' => 'product/{product}'], function () {
        Route::get('/', ['as' => 'shop_show_product', 'uses' => 'ProductController@product']);
    });
    Route::get('/', ['as' => 'shop_show_category', 'uses' => 'CategoryController@category']);
});

通过重新排列以便首先使用更具体的路由,您知道路由器将首先检查shop_show_product路由是否匹配。如果未能在网址末尾看到product/xxx,则会尝试匹配shop_show_category路由。