From 624802b57ac4e7d821bd6c3521de507bca50013d Mon Sep 17 00:00:00 2001 From: Yosh de Vos Date: Wed, 21 May 2014 15:59:55 +0200 Subject: [PATCH] Added configuration to disable body formats --- DependencyInjection/Configuration.php | 19 ++++++++++++--- DependencyInjection/NelmioApiDocExtension.php | 5 ++-- Formatter/HtmlFormatter.php | 24 +++++++++++++++---- Resources/config/formatters.xml | 7 ++++-- Resources/doc/index.md | 13 ++++++---- Resources/views/layout.html.twig | 14 +++++++---- 6 files changed, 61 insertions(+), 21 deletions(-) diff --git a/DependencyInjection/Configuration.php b/DependencyInjection/Configuration.php index ec4e49a..6a97d70 100644 --- a/DependencyInjection/Configuration.php +++ b/DependencyInjection/Configuration.php @@ -50,9 +50,22 @@ class Configuration implements ConfigurationInterface ->scalarNode('enabled')->defaultTrue()->end() ->scalarNode('endpoint')->defaultNull()->end() ->scalarNode('accept_type')->defaultNull()->end() - ->enumNode('body_format') - ->values(array('form', 'json')) - ->defaultValue('form') + ->arrayNode('body_format') + ->addDefaultsIfNotSet() + ->beforeNormalization() + ->ifString() + ->then(function($v) { return array('default_format' => $v); }) + ->end() + ->children() + ->arrayNode('formats') + ->defaultValue(array('form', 'json')) + ->prototype('scalar')->end() + ->end() + ->enumNode('default_format') + ->values(array('form', 'json')) + ->defaultValue('form') + ->end() + ->end() ->end() ->arrayNode('request_format') ->addDefaultsIfNotSet() diff --git a/DependencyInjection/NelmioApiDocExtension.php b/DependencyInjection/NelmioApiDocExtension.php index a56eacd..f5b3c78 100644 --- a/DependencyInjection/NelmioApiDocExtension.php +++ b/DependencyInjection/NelmioApiDocExtension.php @@ -33,9 +33,10 @@ class NelmioApiDocExtension extends Extension $container->setParameter('nelmio_api_doc.api_name', $config['name']); $container->setParameter('nelmio_api_doc.sandbox.enabled', $config['sandbox']['enabled']); $container->setParameter('nelmio_api_doc.sandbox.endpoint', $config['sandbox']['endpoint']); - $container->setParameter('nelmio_api_doc.sandbox.request_format.method', $config['sandbox']['request_format']['method']); $container->setParameter('nelmio_api_doc.sandbox.accept_type', $config['sandbox']['accept_type']); - $container->setParameter('nelmio_api_doc.sandbox.body_format', $config['sandbox']['body_format']); + $container->setParameter('nelmio_api_doc.sandbox.body_format.formats', $config['sandbox']['body_format']['formats']); + $container->setParameter('nelmio_api_doc.sandbox.body_format.default_format', $config['sandbox']['body_format']['default_format']); + $container->setParameter('nelmio_api_doc.sandbox.request_format.method', $config['sandbox']['request_format']['method']); $container->setParameter('nelmio_api_doc.sandbox.request_format.default_format', $config['sandbox']['request_format']['default_format']); $container->setParameter('nelmio_api_doc.sandbox.request_format.formats', $config['sandbox']['request_format']['formats']); diff --git a/Formatter/HtmlFormatter.php b/Formatter/HtmlFormatter.php index 0f026cf..3b0b00c 100644 --- a/Formatter/HtmlFormatter.php +++ b/Formatter/HtmlFormatter.php @@ -55,10 +55,15 @@ class HtmlFormatter extends AbstractFormatter */ private $acceptType; + /** + * @var array + */ + private $bodyFormats; + /** * @var string */ - private $bodyFormat; + private $defaultBodyFormat; /** * @var array @@ -119,11 +124,19 @@ class HtmlFormatter extends AbstractFormatter } /** - * @param string $bodyFormat + * @param array $bodyFormats */ - public function setBodyFormat($bodyFormat) + public function setBodyFormats(array $bodyFormats) { - $this->bodyFormat = $bodyFormat; + $this->bodyFormats = $bodyFormats; + } + + /** + * @param string $defaultBodyFormat + */ + public function setDefaultBodyFormat($defaultBodyFormat) + { + $this->defaultBodyFormat = $defaultBodyFormat; } /** @@ -205,7 +218,8 @@ class HtmlFormatter extends AbstractFormatter 'enableSandbox' => $this->enableSandbox, 'requestFormatMethod' => $this->requestFormatMethod, 'acceptType' => $this->acceptType, - 'bodyFormat' => $this->bodyFormat, + 'bodyFormats' => $this->bodyFormats, + 'defaultBodyFormat' => $this->defaultBodyFormat, 'requestFormats' => $this->requestFormats, 'defaultRequestFormat' => $this->defaultRequestFormat, 'date' => date(DATE_RFC822), diff --git a/Resources/config/formatters.xml b/Resources/config/formatters.xml index beaf429..5cd711f 100644 --- a/Resources/config/formatters.xml +++ b/Resources/config/formatters.xml @@ -46,8 +46,11 @@ %nelmio_api_doc.sandbox.accept_type% - - %nelmio_api_doc.sandbox.body_format% + + %nelmio_api_doc.sandbox.body_format.formats% + + + %nelmio_api_doc.sandbox.body_format.default_format% %nelmio_api_doc.sandbox.authentication% diff --git a/Resources/doc/index.md b/Resources/doc/index.md index b763562..4babe58 100644 --- a/Resources/doc/index.md +++ b/Resources/doc/index.md @@ -320,20 +320,23 @@ configure this sandbox using the following parameters: accept_type: application/json # default is `~` (`null`), if set, the value is # automatically populated as the `Accept` header - body_format: form # default is `form`, determines whether to send + body_format: + formats: [ form, json ] # array of enabled body formats, + # remove all elements to disable the selectbox + default_format: form # default is `form`, determines whether to send # `x-www-form-urlencoded` data or json-encoded # data (by setting this parameter to `json`) in # sandbox requests request_format: - formats: # default `json` and `xml`, + formats: # default is `json` and `xml`, json: application/json # override to add custom formats or disable - xml: application/xml # default formats + xml: application/xml # the default formats - method: format_param # default `format_param`, alternately `accept_header`, + method: format_param # default is `format_param`, alternately `accept_header`, # decides how to request the response format - default_format: json # default `json`, + default_format: json # default is `json`, # default content format to request (see formats) ### Command diff --git a/Resources/views/layout.html.twig b/Resources/views/layout.html.twig index 2c964fe..f2116e7 100644 --- a/Resources/views/layout.html.twig +++ b/Resources/views/layout.html.twig @@ -17,11 +17,13 @@

{{ apiName }}

{% if enableSandbox %}
+ {% if bodyFormats|length > 0 %} body format: + {% endif %} request format: