'[a-z]+', 'date' => DateParam::PATTERN], methods: ['GET'])] public function index(Request $request, string $type, string $date): Response { $resourceType = $this->resourceType($type); $selected = DateParam::parseOrToday($date); $time = $this->boardTime($request); if (!$request->headers->has('HX-Request')) { return $this->redirectToRoute('app_board', $this->boardUrlParameters($resourceType, $selected, $time)); } return $this->boardResponse($resourceType, $selected, $time, ['calendar', 'floorplan']); } /** * Route requirements cannot enumerate the enum, so {type} is matched loosely and resolved * here -- an unknown kind is a 404 rather than a 500. */ private function resourceType(string $value): ResourceType { return ResourceType::tryFrom($value) ?? throw $this->createNotFoundException(\sprintf('Unknown bookable kind "%s".', $value)); } }