diff --git a/Annotation/ApiDoc.php b/Annotation/ApiDoc.php index 0b48c3b..863783c 100644 --- a/Annotation/ApiDoc.php +++ b/Annotation/ApiDoc.php @@ -47,6 +47,12 @@ class ApiDoc * @var array */ private $parameters = array(); + /** + * Headers that client can send. + * + * @var array + */ + private $headers = array(); /** * @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'])) { $this->output = $data['output']; } @@ -457,6 +476,15 @@ class ApiDoc $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 * @@ -611,8 +639,17 @@ class ApiDoc return $this->parameters; } + /** + * @return array + */ + public function getHeaders() + { + return $this->headers; + } + /** * @param boolean $deprecated + * @return $this */ public function setDeprecated($deprecated) { @@ -663,6 +700,10 @@ class ApiDoc $data['parameters'] = $parameters; } + if ($headers = $this->headers) { + $data['headers'] = $headers; + } + if ($requirements = $this->requirements) { $data['requirements'] = $requirements; } diff --git a/Resources/doc/the-apidoc-annotation.rst b/Resources/doc/the-apidoc-annotation.rst index e4139b3..a5c7468 100644 --- a/Resources/doc/the-apidoc-annotation.rst +++ b/Resources/doc/the-apidoc-annotation.rst @@ -93,6 +93,28 @@ The following properties are available: * ``filters``: an array of filters; * ``requirements``: an array of requirements; * ``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 Form Types, classes with JMS Serializer metadata, classes with Validation component metadata and classes that implement JsonSerializable) useful for diff --git a/Resources/views/method.html.twig b/Resources/views/method.html.twig index 93a942f..0c75d6d 100644 --- a/Resources/views/method.html.twig +++ b/Resources/views/method.html.twig @@ -139,6 +139,29 @@ {% endif %} + + {% if data.headers is defined and data.headers is not empty %} +
Name | +Required? | +Description | +
---|---|---|
{{ name }} | +{{ infos.required is defined and infos.required == 'true' ? 'true' : 'false'}} | +{{ infos.description is defined ? infos.description|trans : ''}} | +