diff --git a/DependencyInjection/Configuration.php b/DependencyInjection/Configuration.php
index 7a03f78..721c962 100644
--- a/DependencyInjection/Configuration.php
+++ b/DependencyInjection/Configuration.php
@@ -28,6 +28,13 @@ class Configuration implements ConfigurationInterface
->children()
->scalarNode('enabled')->defaultTrue()->end()
->scalarNode('endpoint')->defaultValue('/app_dev.php')->end()
+ ->scalarNode('json_declaration_method')
+ ->defaultValue('format_param')
+ ->validate()
+ ->ifNotInArray(array('format_param', 'accept_header'))
+ ->thenInvalid("Unknown json declaration method '%s'.")
+ ->end()
+ ->end()
->arrayNode('authentication')
->children()
->scalarNode('name')->isRequired()->end()
diff --git a/DependencyInjection/NelmioApiDocExtension.php b/DependencyInjection/NelmioApiDocExtension.php
index 321a2cc..1852fcf 100644
--- a/DependencyInjection/NelmioApiDocExtension.php
+++ b/DependencyInjection/NelmioApiDocExtension.php
@@ -31,6 +31,7 @@ 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.json_declaration_method', $config['sandbox']['json_declaration_method']);
$loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('formatters.xml');
diff --git a/Formatter/HtmlFormatter.php b/Formatter/HtmlFormatter.php
index 0e570c7..5c1dd30 100644
--- a/Formatter/HtmlFormatter.php
+++ b/Formatter/HtmlFormatter.php
@@ -40,6 +40,11 @@ class HtmlFormatter extends AbstractFormatter
*/
private $engine;
+ /**
+ * @var string
+ */
+ private $jsonDeclarationMethod;
+
/**
* @param array $authentication
*/
@@ -80,6 +85,14 @@ class HtmlFormatter extends AbstractFormatter
$this->engine = $engine;
}
+ /**
+ * @param string $method
+ */
+ public function setJsonDeclarationMethod($method)
+ {
+ $this->jsonDeclarationMethod = $method;
+ }
+
/**
* {@inheritdoc}
*/
@@ -133,13 +146,14 @@ class HtmlFormatter extends AbstractFormatter
private function getGlobalVars()
{
return array(
- 'apiName' => $this->apiName,
- 'authentication' => $this->authentication,
- 'endpoint' => $this->endpoint,
- 'enableSandbox' => $this->enableSandbox,
- 'date' => date(DATE_RFC822),
- 'css' => file_get_contents(__DIR__ . '/../Resources/public/css/screen.css'),
- 'js' => file_get_contents(__DIR__ . '/../Resources/public/js/all.js'),
+ 'apiName' => $this->apiName,
+ 'authentication' => $this->authentication,
+ 'endpoint' => $this->endpoint,
+ 'enableSandbox' => $this->enableSandbox,
+ 'jsonDeclarationMethod' => $this->jsonDeclarationMethod,
+ 'date' => date(DATE_RFC822),
+ 'css' => file_get_contents(__DIR__ . '/../Resources/public/css/screen.css'),
+ 'js' => file_get_contents(__DIR__ . '/../Resources/public/js/all.js'),
);
}
diff --git a/Resources/config/formatters.xml b/Resources/config/formatters.xml
index bc1dcbf..60373b5 100644
--- a/Resources/config/formatters.xml
+++ b/Resources/config/formatters.xml
@@ -37,6 +37,9 @@
%nelmio_api_doc.sandbox.endpoint%
+
+ %nelmio_api_doc.sandbox.json_declaration_method%
+
%nelmio_api_doc.sandbox.authentication%
diff --git a/Resources/views/layout.html.twig b/Resources/views/layout.html.twig
index 306befb..95cd134 100644
--- a/Resources/views/layout.html.twig
+++ b/Resources/views/layout.html.twig
@@ -134,13 +134,18 @@
var url = $(this).attr('action'),
method = $(this).attr('method'),
self = this,
- params = {
- _format: 'json' // default format if not overriden in the form
- },
+ params = {},
headers = {},
content = $(this).find('textarea.content').val();
result_container = $('.result', $(this).parent());
+ var jsonDeclarationMethod = '{{ jsonDeclarationMethod }}';
+ if (jsonDeclarationMethod == 'format_param') {
+ params['_format'] = 'json';
+ } else if (jsonDeclarationMethod == 'accept_header') {
+ headers['Accept'] = 'application/json';
+ }
+
// retrieve all the parameters to send
$('.parameters .tuple', $(this)).each(function() {
var key, value;