嗨,我有两条路线看起来完全相同,只是其中一条有一个额外的参数,名为"流派"。如何让它们调用它们的on例程,而不是将它们混淆。
Route::get('browse/{product_slug}', array(
'as' => 'products.view_by_producttype',
function($slug)
{
}
))->where('product_slug', '[A-Za-z'-]+');
Route::get('browse/{producttype_slug}/{genre_slug}', array(
'as' => 'products.view_by_producttype_genre',
function($productype_slug, $genre_slug)
{
}
))->where('producttype_slug', '[A-Za-z'-]+')->where('genre_slug', '[A-Za-z'-]+');
升级代码和订单:
Route::get('browse/{producttype_slug}', array(
'as' => 'products.view_by_producttype',
function($producttype_slug)
{
$producttype = ProductTypes::where('slug', '=', $producttype_slug)->firstOrFail();
$items = DB::table('products')->join('productvariations', function($join) {
$join->on('productvariations.product_id', '=', 'products.id');
})->where('producttype_id', '=', $producttype->id)->paginate(1);
return View::make('products.view_by_producttype')->with(compact('items', 'producttype'));
}
))->where('producttype_slug', '[A-Za-z'-]+');
Route::get('browse/{producttype_slug}/{genre_slug}', array(
'as' => 'products.view_by_producttype_genre',
function($producttype_slug, $genre_slug)
{
$producttype = ProductTypes::where('slug', '=', $producttype_slug)->firstOrFail();
$genre = GenreTypes::where('slug', '=', $genre_slug)->firstOrFail();
$items = DB::table('products')->join('product_genretypes', function($join) {
$join->on('product_genretypes.product_id', '=', 'products.id');
})->join('productvariations', function($join) {
$join->on('productvariations.product_id', '=', 'products.id');
})
->where('genretype_id', '=', $genre->id)
->where('producttype_id', '=', $producttype->id)
->paginate(1);
return View::make('products.view_by_type_genre')->with(compact('items', 'producttype', 'genre'));
}
))->where('producttype_slug', '[A-Za-z'-]+')->where('genre_slug', '[A-Za-z'-]+');
只需交换订单-首先定义流派路线-如下所示:
Route::get('browse/{producttype_slug}/{genre_slug}', array(
'as' => 'products.view_by_producttype_genre',
function($productype_slug, $genre_slug)
{
}
))->where('producttype_slug', '[A-Za-z'-]+')->where('genre_slug', '[A-Za-z'-]+');
Route::get('browse/{product_slug}', array(
'as' => 'products.view_by_producttype',
function($product_slug)
{
}
))->where('product_slug', '[A-Za-z'-]+');
这样,如果一条路线与流派路线匹配,它将首先被使用。
否则,它将默认返回到正常的产品路线。