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

Posted

技术标签:

【中文标题】如何在laravel路由中定义两个参数【英文标题】:how to define two parameter in laravel route 【发布时间】: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;

【问题讨论】:

【参考方案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')); 我们如何传递多个可选参数并使用它们?

以上是关于如何在laravel路由中定义两个参数的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel 5 中验证路由参数?

如何在Laravel 5.2中将表单数据作为路由参数传递

laravel 5.2 如何在刀片中获取路由参数?

Laravel 在控制器外部获取路由参数

Laravel:如何将某些路由参数限制为特定值?

Laravel如何将组前缀参数添加到路由功能