mirror of
https://github.com/retailcrm/NelmioApiDocBundle.git
synced 2025-02-02 07:41:43 +03:00
Add support for using name
in the input and output options for JsonSerializable and validation parsers
This commit is contained in:
parent
37c6465700
commit
406a4e1b5b
@ -31,15 +31,21 @@ class JsonSerializableParser implements ParserInterface
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function parse(array $item)
|
||||
public function parse(array $input)
|
||||
{
|
||||
/** @var \JsonSerializable $obj */
|
||||
$obj = new $item['class']();
|
||||
$obj = new $input['class']();
|
||||
|
||||
$encoded = $obj->jsonSerialize();
|
||||
$top = $this->getItemMetaData($encoded);
|
||||
$parsed = $this->getItemMetaData($encoded);
|
||||
|
||||
return $top['children'];
|
||||
if (isset($input['name']) && !empty($input['name'])) {
|
||||
$output = array();
|
||||
$output[$input['name']] = $parsed;
|
||||
return $output;
|
||||
}
|
||||
|
||||
return $parsed['children'];
|
||||
}
|
||||
|
||||
public function getItemMetaData($item)
|
||||
@ -47,10 +53,12 @@ class JsonSerializableParser implements ParserInterface
|
||||
$type = gettype($item);
|
||||
|
||||
$meta = array(
|
||||
'dataType' => $type,
|
||||
'required' => true,
|
||||
'description' => '',
|
||||
'readonly' => false
|
||||
'dataType' => $type == 'NULL' ? null : $type,
|
||||
'actualType' => $type,
|
||||
'subType' => null,
|
||||
'required' => null,
|
||||
'description' => null,
|
||||
'readonly' => null
|
||||
);
|
||||
|
||||
if ($type == 'object' && $item instanceof \JsonSerializable) {
|
||||
|
@ -69,7 +69,24 @@ class ValidationParser implements ParserInterface, PostParserInterface
|
||||
{
|
||||
$className = $input['class'];
|
||||
|
||||
return $this->doParse($className, array());
|
||||
$parsed = $this->doParse($className, array());
|
||||
|
||||
if (isset($input['name']) && !empty($input['name'])) {
|
||||
$output = array();
|
||||
$output[$input['name']] = array(
|
||||
'dataType' => 'object',
|
||||
'actualType' => 'object',
|
||||
'class' => $className,
|
||||
'subType' => null,
|
||||
'required' => null,
|
||||
'description' => null,
|
||||
'readonly' => null,
|
||||
'children' => $parsed
|
||||
);
|
||||
return $output;
|
||||
}
|
||||
|
||||
return $parsed;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -70,8 +70,9 @@
|
||||
<tag name="nelmio_api_doc.extractor.parser" />
|
||||
</service>
|
||||
|
||||
<!-- priority=1 means it comes before the validation parser, which can often add better type information -->
|
||||
<service id="nelmio_api_doc.parser.json_serializable_parser" class="%nelmio_api_doc.parser.json_serializable_parser.class%">
|
||||
<tag name="nelmio_api_doc.extractor.parser" />
|
||||
<tag name="nelmio_api_doc.extractor.parser" priority="1" />
|
||||
</service>
|
||||
</services>
|
||||
|
||||
|
@ -164,7 +164,7 @@ class YourController
|
||||
* `parameters`: an array of parameters;
|
||||
|
||||
* `input`: the input type associated to the method (currently this supports Form Types, classes with JMS Serializer
|
||||
metadata, and classes with Validation component metadata) useful for POST|PUT methods, either as FQCN or as form type
|
||||
metadata, classes with Validation component metadata and classes that implement JsonSerializable) useful for POST|PUT methods, either as FQCN or as form type
|
||||
(if it is registered in the form factory in the container).
|
||||
|
||||
* `output`: the output type associated with the response. Specified and parsed the same way as `input`.
|
||||
|
@ -64,9 +64,11 @@ class JsonSerializableParserTest extends \PHPUnit_Framework_TestCase
|
||||
'children' => array(
|
||||
'value' => array(
|
||||
'dataType' => 'array',
|
||||
'required' => true,
|
||||
'description' => '',
|
||||
'readonly' => false
|
||||
'actualType' => 'array',
|
||||
'subType' => null,
|
||||
'required' => null,
|
||||
'description' => null,
|
||||
'readonly' => null
|
||||
)
|
||||
)
|
||||
)
|
||||
|
Loading…
x
Reference in New Issue
Block a user