如何在laravel路由中定义两个参数

时间:2017-07-24 23:40:50

标签: php laravel laravel-5 routes laravel-5.3

即时通讯使用laravel 5.4,我有一个品牌和一个产品表。我想在路由中定义两个参数,并在控制器或RouteServiceProvider中进行搜索。

想象:site.com/samsung/ =>获得三星品牌的所有产品。

和:site.com/samsung/galaxys8 =>获得三星品牌和galaxys8型号的所有产品

我可以使用两个独立的路径和控制器方法来定义:(使用1个参数{brand}和controller @ method1定义路由1,并使用2个参数{brand} / {product}和controller @ method2定义路由2)

我能做得更好吗?我在laravel有点新。谢谢

Route::get('/{brand}', 'AdvertismentController@show');
Route::get('/{brand}/{product}', 'AdvertismentController@show2');



public function show($brand)
{
        $brands = Advertisment::where('brand' , $brand)->get();
        return $brands;
}

public function show2($brand , $product)
{
    $products = Advertisment::where('product' , $product)->get();
    return $products;
}

2 个答案:

答案 0 :(得分:6)

我想你想要结合类似的控制器动作,你可以使用这样的可选参数:

Route::get('/{brand}/{product?}', 'AdvertismentController@show');

public function show($brand, $product = null)
{
    if (!is_null($product)) {
        $results = Advertisment::where('product' , $product)->get();
    } else {
        $results = Advertisment::where('brand' , $brand)->get();
    }

    return $results;
}

答案 1 :(得分:0)

就像这个示例问题here

一样

您在URI上传递了两个参数:

Route::get('/{brand}/{product}', 'AdvertismentController@show2');

并且在观点上:

route('remindHelper',['brand'=>$brandName, 'product'=>productId]);