diff --git a/app/Http/Controllers/ProductsController.php b/app/Http/Controllers/ProductsController.php
index 9e1b78c5..37d43bbb 100644
--- a/app/Http/Controllers/ProductsController.php
+++ b/app/Http/Controllers/ProductsController.php
@@ -30,7 +30,7 @@ class ProductsController extends Controller
return view('front.products.index', compact('productsSlides', 'ranges', 'meatTypes', 'ct', 'labels'));
}
- public function filter(Model $model, SubRange $subrange = null)
+ public function filter(Model $model, SubRange $slugSubRange = null)
{
// On récupère les mêmes données qu'au dessus pour l'affichage
$productsSlides = ProductSliderPictures::where('status', 1)->orderBy('order', 'ASC')->get();
@@ -52,11 +52,11 @@ class ProductsController extends Controller
/** @var \App\Models\Range */
$gamme = $model;
$subranges = $gamme->subranges()->orderBy('order')->get();
- if ($subrange) {
+ if ($slugSubRange) {
$title = $gamme->name;
$productsList = $gamme->products()
->where('status', true)
- ->where('sub_range_id', $subrange->id)
+ ->where('sub_range_id', $slugSubRange->id)
->orderBy('order')
->get();
} else {
@@ -88,7 +88,9 @@ class ProductsController extends Controller
default:
abort(404);
break;
- }//end switch
+ } //end switch
+
+ $subrange = $slugSubRange;
return view('front.products.index', compact(
'productsList',
diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php
index 4e9ca6fa..42218657 100644
--- a/app/Providers/RouteServiceProvider.php
+++ b/app/Providers/RouteServiceProvider.php
@@ -32,7 +32,9 @@ use App\Models\Reduction;
use App\Models\SubRange;
use App\Models\Tag;
use BadMethodCallException;
+use Illuminate\Database\Eloquent\Builder;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
+use Illuminate\Routing\Route as RoutingRoute;
use Illuminate\Support\Facades\Route;
use Kwaadpepper\Enum\Exceptions\EnumNotRoutableException;
@@ -108,8 +110,16 @@ class RouteServiceProvider extends ServiceProvider
Route::bind('moment', function ($value) {
return Moments::where('id', $value)->orWhere('slug', $value)->firstOrFail();
});
+ Route::bind('slugSubRange', function ($value, RoutingRoute $route) {
+ // * slugRange must be resolved since slugSubRange comes second on url.
+ /** @var \App\Models\Range */
+ $slugRange = $route->parameter('slugRange');
+ return SubRange::whereSlug($value)->whereHas('ranges', function (Builder $q) use ($slugRange) {
+ $q->where('id', $slugRange->id);
+ })->firstOrFail();
+ });
Route::bind('subRange', function ($value) {
- return SubRange::where('id', $value)->orWhere('slug', $value)->firstOrFail();
+ return SubRange::where('id', $value)->firstOrFail();
});
Route::bind('slugRange', function ($value) {
return Range::where('slug', $value)->where('status', true)->firstOrFail();
diff --git a/resources/views/front/products/index.blade.php b/resources/views/front/products/index.blade.php
index cbd93bd4..3dca9acc 100644
--- a/resources/views/front/products/index.blade.php
+++ b/resources/views/front/products/index.blade.php
@@ -124,7 +124,7 @@ $vegetal = ($vegetal || isset($gamme) && $gamme && $gamme->slug === "le-vegetal"
@svg('assets/images/produit/arrow-_-.svg')
@foreach($subranges as $srange)
-
+
@if(isset($srange->picture) and strlen($srange->picture))
diff --git a/routes/web.php b/routes/web.php
index 18a60cb5..7af62beb 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -63,7 +63,9 @@ Route::prefix('/produits')
->name('products.')
->group(function () {
Route::get('/', [ProductsController::class, 'index'])->name('index');
- Route::get('/gamme/{slugRange}/{subRange?}', [ProductsController::class, 'filter'])->name('range');
+ Route::get('/gamme/{slugRange:slug}/{slugSubRange:slug?}', [
+ ProductsController::class, 'filter'
+ ])->name('range');
Route::get('/moment-consommations/{slugConsumptionTime}', [ProductsController::class, 'filter'])
->name('consumption-times');
Route::get('/type-viande/{slugMeatType}', [ProductsController::class, 'filter'])->name('meat-type');