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');