mirror of
https://github.com/retailcrm/NelmioApiDocBundle.git
synced 2025-02-02 15:51:48 +03:00
commit
7288ccad07
@ -47,6 +47,12 @@ class ApiDoc
|
|||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
private $parameters = array();
|
private $parameters = array();
|
||||||
|
/**
|
||||||
|
* Headers that client can send.
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
private $headers = array();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var string
|
||||||
@ -230,6 +236,19 @@ class ApiDoc
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isset($data['headers'])) {
|
||||||
|
foreach ($data['headers'] as $header) {
|
||||||
|
if (!isset($header['name'])) {
|
||||||
|
throw new \InvalidArgumentException('A "header" element has to contain a "name" attribute');
|
||||||
|
}
|
||||||
|
|
||||||
|
$name = $header['name'];
|
||||||
|
unset($header['name']);
|
||||||
|
|
||||||
|
$this->addHeader($name, $header);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (isset($data['output'])) {
|
if (isset($data['output'])) {
|
||||||
$this->output = $data['output'];
|
$this->output = $data['output'];
|
||||||
}
|
}
|
||||||
@ -457,6 +476,15 @@ class ApiDoc
|
|||||||
$this->parameters = $parameters;
|
$this->parameters = $parameters;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param $name
|
||||||
|
* @param array $header
|
||||||
|
*/
|
||||||
|
public function addHeader($name, array $header)
|
||||||
|
{
|
||||||
|
$this->headers[$name] = $header;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the response data as processed by the parsers - same format as parameters
|
* Sets the response data as processed by the parsers - same format as parameters
|
||||||
*
|
*
|
||||||
@ -611,8 +639,17 @@ class ApiDoc
|
|||||||
return $this->parameters;
|
return $this->parameters;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getHeaders()
|
||||||
|
{
|
||||||
|
return $this->headers;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param boolean $deprecated
|
* @param boolean $deprecated
|
||||||
|
* @return $this
|
||||||
*/
|
*/
|
||||||
public function setDeprecated($deprecated)
|
public function setDeprecated($deprecated)
|
||||||
{
|
{
|
||||||
@ -663,6 +700,10 @@ class ApiDoc
|
|||||||
$data['parameters'] = $parameters;
|
$data['parameters'] = $parameters;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($headers = $this->headers) {
|
||||||
|
$data['headers'] = $headers;
|
||||||
|
}
|
||||||
|
|
||||||
if ($requirements = $this->requirements) {
|
if ($requirements = $this->requirements) {
|
||||||
$data['requirements'] = $requirements;
|
$data['requirements'] = $requirements;
|
||||||
}
|
}
|
||||||
|
@ -93,6 +93,28 @@ The following properties are available:
|
|||||||
* ``filters``: an array of filters;
|
* ``filters``: an array of filters;
|
||||||
* ``requirements``: an array of requirements;
|
* ``requirements``: an array of requirements;
|
||||||
* ``parameters``: an array of parameters;
|
* ``parameters``: an array of parameters;
|
||||||
|
* ``headers``: an array of headers; available properties are: ``name``, ``description``, ``required``, ``default``. Example:
|
||||||
|
|
||||||
|
.. code-block:: php
|
||||||
|
|
||||||
|
class YourController
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @ApiDoc(
|
||||||
|
* headers={
|
||||||
|
* {
|
||||||
|
* "name"="X-AUTHORIZE-KEY",
|
||||||
|
* "description"="Authorization key"
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* )
|
||||||
|
*/
|
||||||
|
public function myFunction()
|
||||||
|
{
|
||||||
|
// ...
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
* ``input``: the input type associated to the method (currently this supports
|
* ``input``: the input type associated to the method (currently this supports
|
||||||
Form Types, classes with JMS Serializer metadata, classes with Validation
|
Form Types, classes with JMS Serializer metadata, classes with Validation
|
||||||
component metadata and classes that implement JsonSerializable) useful for
|
component metadata and classes that implement JsonSerializable) useful for
|
||||||
|
@ -139,6 +139,29 @@
|
|||||||
</table>
|
</table>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
|
||||||
|
{% if data.headers is defined and data.headers is not empty %}
|
||||||
|
<h4>Headers</h4>
|
||||||
|
<table class="fullwidth">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Name</th>
|
||||||
|
<th>Required?</th>
|
||||||
|
<th>Description</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{% for name, infos in data.headers %}
|
||||||
|
<tr>
|
||||||
|
<td>{{ name }}</td>
|
||||||
|
<td>{{ infos.required is defined and infos.required == 'true' ? 'true' : 'false'}}</td>
|
||||||
|
<td>{{ infos.description is defined ? infos.description|trans : ''}}</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{% if data.parsedResponseMap is defined and data.parsedResponseMap is not empty %}
|
{% if data.parsedResponseMap is defined and data.parsedResponseMap is not empty %}
|
||||||
<h4>Return</h4>
|
<h4>Return</h4>
|
||||||
<table class='fullwidth'>
|
<table class='fullwidth'>
|
||||||
@ -282,6 +305,18 @@
|
|||||||
</p>
|
</p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
{% if data.headers is defined %}
|
||||||
|
|
||||||
|
{% for name, infos in data.headers %}
|
||||||
|
<p class="tuple">
|
||||||
|
<input type="text" class="key" value="{{ name }}" />
|
||||||
|
<span>=</span>
|
||||||
|
<input type="text" class="value" value="{% if infos.default is defined %}{{ infos.default }}{% endif %}" placeholder="Value" /> <span class="remove">-</span>
|
||||||
|
</p>
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
<p class="tuple">
|
<p class="tuple">
|
||||||
<input type="text" class="key" placeholder="Key" />
|
<input type="text" class="key" placeholder="Key" />
|
||||||
<span>=</span>
|
<span>=</span>
|
||||||
|
@ -34,6 +34,7 @@ class ApiDocTest extends TestCase
|
|||||||
$this->assertFalse(isset($array['parameters']));
|
$this->assertFalse(isset($array['parameters']));
|
||||||
$this->assertNull($annot->getInput());
|
$this->assertNull($annot->getInput());
|
||||||
$this->assertFalse($array['authentication']);
|
$this->assertFalse($array['authentication']);
|
||||||
|
$this->assertFalse(isset($array['headers']));
|
||||||
$this->assertTrue(is_array($array['authenticationRoles']));
|
$this->assertTrue(is_array($array['authenticationRoles']));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -291,6 +292,28 @@ class ApiDocTest extends TestCase
|
|||||||
$this->assertTrue(isset($array['parameters']['fooId']['dataType']));
|
$this->assertTrue(isset($array['parameters']['fooId']['dataType']));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testConstructWithHeaders()
|
||||||
|
{
|
||||||
|
$data = array(
|
||||||
|
'headers' => array(
|
||||||
|
array(
|
||||||
|
'name' => 'headerName',
|
||||||
|
'description' => 'Some description'
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
$annot = new ApiDoc($data);
|
||||||
|
$array = $annot->toArray();
|
||||||
|
|
||||||
|
$this->assertArrayHasKey('headerName', $array['headers']);
|
||||||
|
$this->assertNotEmpty($array['headers']['headerName']);
|
||||||
|
|
||||||
|
$keys = array_keys($array['headers']);
|
||||||
|
$this->assertEquals($data['headers'][0]['name'], $keys[0]);
|
||||||
|
$this->assertEquals($data['headers'][0]['description'], $array['headers']['headerName']['description']);
|
||||||
|
}
|
||||||
|
|
||||||
public function testConstructWithOneTag()
|
public function testConstructWithOneTag()
|
||||||
{
|
{
|
||||||
$data = array(
|
$data = array(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user