diff --git a/Parser/JsonSerializableParser.php b/Parser/JsonSerializableParser.php index e8835ac..2ff1b97 100644 --- a/Parser/JsonSerializableParser.php +++ b/Parser/JsonSerializableParser.php @@ -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) { diff --git a/Parser/ValidationParser.php b/Parser/ValidationParser.php index 27a671a..a0b6496 100644 --- a/Parser/ValidationParser.php +++ b/Parser/ValidationParser.php @@ -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; } /** diff --git a/Resources/config/services.xml b/Resources/config/services.xml index 12960ce..3b5bfca 100644 --- a/Resources/config/services.xml +++ b/Resources/config/services.xml @@ -70,8 +70,9 @@ + - + diff --git a/Resources/doc/index.md b/Resources/doc/index.md index 6185cd3..bca5c56 100644 --- a/Resources/doc/index.md +++ b/Resources/doc/index.md @@ -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`. diff --git a/Tests/Parser/JsonSerializableParserTest.php b/Tests/Parser/JsonSerializableParserTest.php index 0c5c1f4..f4db0d3 100644 --- a/Tests/Parser/JsonSerializableParserTest.php +++ b/Tests/Parser/JsonSerializableParserTest.php @@ -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 ) ) )