This is my middleware
<?php
declare(strict_types=1);
namespace App\Http\Middleware;
use Closure;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
/**
* Middleware to enforce parent-child model relationships in nested routes.
* Extracts route parameters in sequence and builds Eloquent queries to validate relationship chains.
*/
class EnforcesModelRelations
{
/**
* Handle an incoming request.
*/
public function handle(Request $request, Closure $next): Response
{
$parameters = $request->route()->parameters();
$models = array_filter($parameters, fn($p) => $p instanceof Model);
// Walk through models and validate each belongs to previous
$previous = null;
foreach ($models as $paramName => $current) {
if ($previous && method_exists($previous, 'resolveChildRouteBinding')) {
$resolved = $previous->resolveChildRouteBinding(
class_basename($current),
$current->getKey(),
$current->getKeyName()
);
if (!$resolved) {
throw (new ModelNotFoundException)->setModel(get_class($current), [$current->getKey()]);
}
}
$previous = $current;
}
return $next($request);
}
}