resolver->resolve($request); $this->validator->assertValid($context, $request->user()); $this->store->set($context); $request->attributes->set(SchoolContext::class, $context); return $next($request); } catch (SchoolContextException $exception) { return new JsonResponse([ 'message' => $exception->getMessage(), ], $this->statusCodeFor($exception)); } finally { // Avoid context bleeding in long-running workers such as Octane. $this->store->forget(); } } private function statusCodeFor(SchoolContextException $exception): int { $code = $exception->getCode(); return in_array($code, [401, 403, 422, 500], true) ? $code : 422; } }