【问题标题】:how to define two parameter in laravel route如何在laravel路由中定义两个参数
【发布时间】:2017-12-30 16:40:52
【问题描述】:

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

imagine : site.com/samsung/ => 获取所有带有三星品牌的产品。

and : 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;
}

【问题讨论】:

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


    【解决方案1】:

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

    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;
    }
    

    【讨论】:

    • 非常好。有效。但是你能解释一下路线中产品后面的问号是什么吗?谢谢
    • 参数名后的问号使参数的存在成为可选的。
    • 很高兴为您提供帮助。
    • 我们如何传递多个可选参数并使用它们?
    【解决方案2】:

    就像这个示例问题here

    您在 URI 上传递两个参数:

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

    在视图上:

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

    【讨论】:

    • 控制器里有什么?得到他们
    • 在控制器中你可以有类似的东西: public function show($brand, $product) { $product = Product::findOrFail($product); return view('product.show', compact('brand', 'product')); }
    • 我们如何传递多个可选参数并使用它们?
    猜你喜欢
    • 1970-01-01
    • 2014-10-17
    • 1970-01-01
    • 2017-07-21
    • 2019-11-18
    • 1970-01-01
    • 2017-06-14
    • 1970-01-01
    • 2015-10-14
    相关资源
    最近更新 更多