Make JSON declaration method configurable

This commit is contained in:
Vyacheslav Slinko 2012-10-16 23:41:16 +04:00
parent 6aac4a001e
commit 8e03ef99fa
5 changed files with 40 additions and 10 deletions

View File

@ -28,6 +28,13 @@ class Configuration implements ConfigurationInterface
->children() ->children()
->scalarNode('enabled')->defaultTrue()->end() ->scalarNode('enabled')->defaultTrue()->end()
->scalarNode('endpoint')->defaultValue('/app_dev.php')->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') ->arrayNode('authentication')
->children() ->children()
->scalarNode('name')->isRequired()->end() ->scalarNode('name')->isRequired()->end()

View File

@ -31,6 +31,7 @@ class NelmioApiDocExtension extends Extension
$container->setParameter('nelmio_api_doc.api_name', $config['name']); $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.enabled', $config['sandbox']['enabled']);
$container->setParameter('nelmio_api_doc.sandbox.endpoint', $config['sandbox']['endpoint']); $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 = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('formatters.xml'); $loader->load('formatters.xml');

View File

@ -40,6 +40,11 @@ class HtmlFormatter extends AbstractFormatter
*/ */
private $engine; private $engine;
/**
* @var string
*/
private $jsonDeclarationMethod;
/** /**
* @param array $authentication * @param array $authentication
*/ */
@ -80,6 +85,14 @@ class HtmlFormatter extends AbstractFormatter
$this->engine = $engine; $this->engine = $engine;
} }
/**
* @param string $method
*/
public function setJsonDeclarationMethod($method)
{
$this->jsonDeclarationMethod = $method;
}
/** /**
* {@inheritdoc} * {@inheritdoc}
*/ */
@ -137,6 +150,7 @@ class HtmlFormatter extends AbstractFormatter
'authentication' => $this->authentication, 'authentication' => $this->authentication,
'endpoint' => $this->endpoint, 'endpoint' => $this->endpoint,
'enableSandbox' => $this->enableSandbox, 'enableSandbox' => $this->enableSandbox,
'jsonDeclarationMethod' => $this->jsonDeclarationMethod,
'date' => date(DATE_RFC822), 'date' => date(DATE_RFC822),
'css' => file_get_contents(__DIR__ . '/../Resources/public/css/screen.css'), 'css' => file_get_contents(__DIR__ . '/../Resources/public/css/screen.css'),
'js' => file_get_contents(__DIR__ . '/../Resources/public/js/all.js'), 'js' => file_get_contents(__DIR__ . '/../Resources/public/js/all.js'),

View File

@ -37,6 +37,9 @@
<call method="setEndpoint"> <call method="setEndpoint">
<argument>%nelmio_api_doc.sandbox.endpoint%</argument> <argument>%nelmio_api_doc.sandbox.endpoint%</argument>
</call> </call>
<call method="setJsonDeclarationMethod">
<argument>%nelmio_api_doc.sandbox.json_declaration_method%</argument>
</call>
<call method="setAuthentication"> <call method="setAuthentication">
<argument>%nelmio_api_doc.sandbox.authentication%</argument> <argument>%nelmio_api_doc.sandbox.authentication%</argument>
</call> </call>

View File

@ -134,13 +134,18 @@
var url = $(this).attr('action'), var url = $(this).attr('action'),
method = $(this).attr('method'), method = $(this).attr('method'),
self = this, self = this,
params = { params = {},
_format: 'json' // default format if not overriden in the form
},
headers = {}, headers = {},
content = $(this).find('textarea.content').val(); content = $(this).find('textarea.content').val();
result_container = $('.result', $(this).parent()); 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 // retrieve all the parameters to send
$('.parameters .tuple', $(this)).each(function() { $('.parameters .tuple', $(this)).each(function() {
var key, value; var key, value;