From 26bf78360b86d25c6d55ff35466806e1f58c000c Mon Sep 17 00:00:00 2001 From: Hugo Sales Date: Wed, 18 Aug 2021 21:33:07 +0100 Subject: [PATCH] [ROUTER][UTIL] Allow specifying the Accept format for a route --- src/Core/Controller.php | 3 ++- src/Core/Router/RouteLoader.php | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Core/Controller.php b/src/Core/Controller.php index 8086fdc247..76b0b45754 100644 --- a/src/Core/Controller.php +++ b/src/Core/Controller.php @@ -118,10 +118,11 @@ class Controller extends AbstractController implements EventSubscriberInterface $event->setResponse($this->render($template, $this->vars)); break; case 'json': + case 'jsonld': $event->setResponse(new JsonResponse($response)); break; default: - throw new ClientException(_m('Unsupported format'), 406); // 406 Not Acceptable + throw new ClientException(_m('Unsupported format: {format}', ['format' => $format]), 406); // 406 Not Acceptable } return $event; diff --git a/src/Core/Router/RouteLoader.php b/src/Core/Router/RouteLoader.php index 195151b304..05125add28 100644 --- a/src/Core/Router/RouteLoader.php +++ b/src/Core/Router/RouteLoader.php @@ -75,7 +75,7 @@ class RouteLoader extends Loader * @param mixed $target Some kind of callable, typically class with `__invoke` or [object, method] * @param null|array $param_reqs Array of {param} => regex * @param null|array $options Possible keys are ['condition', 'defaults', 'format', - * 'fragment', 'http-methods', 'locale', 'methods', 'schemes'] + * 'fragment', 'http-methods', 'locale', 'methods', 'schemes', 'accept'] * 'http-methods' and 'methods' are aliases */ public function connect(string $id, string $uri_path, $target, ?array $options = [], ?array $param_reqs = []) @@ -111,7 +111,7 @@ class RouteLoader extends Loader methods: $options['http-methods'] ?? $options['methods'] ?? [], // condition = '' -- Symfony condition expression, // see https://symfony.com/doc/current/routing.html#matching-expressions - condition: $options['condition'] ?? '' + condition: isset($options['accept']) ? "request.headers.get('Accept') in " . json_encode($options['accept']) : ($options['condition'] ?? '') ) ); }