how to define two parameter in laravel route

15,226

Solution 1

I guess that you want to combine the similar controller actions, you can use optional parameters like this:

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

Solution 2

Just like on this example question here

You pass two arguments on the URI:

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

And on the view:

route('remindHelper',['brand'=>$brandName, 'product'=>productId]);
Share:
15,226
K1-Aria
Author by

K1-Aria

Updated on June 18, 2022

Comments

  • K1-Aria
    K1-Aria almost 2 years

    im using laravel 5.4 and i have a brands and a products table. i want to define two parameter in route and get them in controller or RouteServiceProvider to search.

    imagine : site.com/samsung/ => get all products with samsung brand.

    and : site.com/samsung/galaxys8 => get all products with samsung brand and galaxys8 model

    i can define this using two separate route and controller method : (define route one with 1 parameter{brand} and controller@method1 and define route two with 2 parameters {brand}/{product} and controller@method2)

    can i do this better? im a little new in laravel . thank you

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