From b0d8318d0e184dc0ccf5c93cb27614e12a5a5205 Mon Sep 17 00:00:00 2001 From: JeremyRed Date: Tue, 21 Jul 2026 11:26:15 +1000 Subject: [PATCH] universal routes capture existing onfail callback (fix #1470) --- src/Features/UniversalRoutes.php | 9 ++++++++- tests/UniversalRouteTest.php | 18 ++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/Features/UniversalRoutes.php b/src/Features/UniversalRoutes.php index 40acbeae..076c3276 100644 --- a/src/Features/UniversalRoutes.php +++ b/src/Features/UniversalRoutes.php @@ -23,11 +23,18 @@ class UniversalRoutes implements Feature public function bootstrap(Tenancy $tenancy): void { foreach (static::$identificationMiddlewares as $middleware) { - $middleware::$onFail = function ($exception, $request, $next) { + // preserve any onFail callback set before universal routes bootstraps + $customOnFail = $middleware::$onFail; + + $middleware::$onFail = function ($exception, $request, $next) use ($customOnFail) { if (static::routeHasMiddleware($request->route(), static::$middlewareGroup)) { return $next($request); } + if ($customOnFail instanceof Closure) { + return $customOnFail($exception, $request, $next); + } + throw $exception; }; } diff --git a/tests/UniversalRouteTest.php b/tests/UniversalRouteTest.php index a00f9235..4c1ec5a6 100644 --- a/tests/UniversalRouteTest.php +++ b/tests/UniversalRouteTest.php @@ -88,6 +88,24 @@ class UniversalRouteTest extends TestCase ->assertSuccessful() ->assertSee('Tenancy is initialized.'); } + + #[Test] + public function universal_route_runs_custom_failed_initialization_override() + { + InitializeTenancyByDomain::$onFail = function () { + return 'custom failed logic.'; + }; + + Route::middlewareGroup('universal', []); + config(['tenancy.features' => [UniversalRoutes::class]]); + + Route::get('/foo', fn () => 'Tenant route') + ->middleware([InitializeTenancyByDomain::class]); + + $this->get('http://acme.localhost/foo') + ->assertSuccessful() + ->assertSee('custom failed logic.'); + } } class UniversalRouteController