mirror of
https://github.com/retailcrm/NelmioApiDocBundle.git
synced 2025-02-02 15:51:48 +03:00
Fixed multi-level validation nesting.
Removed "class" parameters from results after processed. Updated README.
This commit is contained in:
parent
5e1549a29d
commit
23f64b84f6
@ -282,6 +282,8 @@ class ApiDocExtractor
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$parameters = $this->clearClasses($parameters);
|
||||||
|
|
||||||
if ('PUT' === $method) {
|
if ('PUT' === $method) {
|
||||||
// All parameters are optional with PUT (update)
|
// All parameters are optional with PUT (update)
|
||||||
array_walk($parameters, function($val, $key) use (&$data) {
|
array_walk($parameters, function($val, $key) use (&$data) {
|
||||||
@ -303,6 +305,7 @@ class ApiDocExtractor
|
|||||||
$response = $parser->parse($normalizedOutput);
|
$response = $parser->parse($normalizedOutput);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
$response = $this->clearClasses($response);
|
||||||
|
|
||||||
$annotation->setResponse($response);
|
$annotation->setResponse($response);
|
||||||
}
|
}
|
||||||
@ -382,7 +385,7 @@ class ApiDocExtractor
|
|||||||
|
|
||||||
protected function mergeParameters($p1, $p2)
|
protected function mergeParameters($p1, $p2)
|
||||||
{
|
{
|
||||||
$params = array();
|
$params = $p1;
|
||||||
|
|
||||||
foreach($p2 as $propname => $propvalue) {
|
foreach($p2 as $propname => $propvalue) {
|
||||||
if(!isset($p1[$propname])) {
|
if(!isset($p1[$propname])) {
|
||||||
@ -434,4 +437,15 @@ class ApiDocExtractor
|
|||||||
$handler->handle($annotation, $annots, $route, $method);
|
$handler->handle($annotation, $annots, $route, $method);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function clearClasses($array)
|
||||||
|
{
|
||||||
|
if(is_array($array)) {
|
||||||
|
unset($array['class']);
|
||||||
|
foreach($array as $name => $item) {
|
||||||
|
$array[$name] = $this->clearClasses($item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $array;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -71,7 +71,12 @@ class ValidationParser implements ParserInterface
|
|||||||
foreach($parameters as $param => $data) {
|
foreach($parameters as $param => $data) {
|
||||||
if(isset($data['class']) && isset($data['children'])) {
|
if(isset($data['class']) && isset($data['children'])) {
|
||||||
$input = array('class' => $data['class']);
|
$input = array('class' => $data['class']);
|
||||||
$parameters[$param]['children'] = $this->parse($input, $parameters[$param]['children']);
|
$parameters[$param]['children'] = array_merge(
|
||||||
|
$parameters[$param]['children'], $this->postParse($input, $parameters[$param]['children'])
|
||||||
|
);
|
||||||
|
$parameters[$param]['children'] = array_merge(
|
||||||
|
$parameters[$param]['children'], $this->parse($input, $parameters[$param]['children'])
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -104,8 +104,9 @@ The following properties are available:
|
|||||||
|
|
||||||
* `filters`: an array of filters;
|
* `filters`: an array of filters;
|
||||||
|
|
||||||
* `input`: the input type associated to the method, currently this supports Form Types, and classes with JMS Serializer
|
* `input`: the input type associated to the method (currently this supports Form Types, classes with JMS Serializer
|
||||||
metadata, useful for POST|PUT methods, either as FQCN or as form type (if it is registered in the form factory in the container).
|
metadata, and classes with Validation component metadata) 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`.
|
* `output`: the output type associated with the response. Specified and parsed the same way as `input`.
|
||||||
|
|
||||||
|
@ -2,10 +2,10 @@
|
|||||||
namespace NelmioApiDocBundle\Tests\Parser;
|
namespace NelmioApiDocBundle\Tests\Parser;
|
||||||
|
|
||||||
use Nelmio\ApiDocBundle\Tests\WebTestCase;
|
use Nelmio\ApiDocBundle\Tests\WebTestCase;
|
||||||
use Nelmio\ApiDocBundle\Parser\Handler\SymfonyValidationHandler;
|
use Nelmio\ApiDocBundle\Parser\ValidationParser;
|
||||||
|
|
||||||
|
|
||||||
class SymfonyValidationHandlerTest extends WebTestCase
|
class ValidationParserTest extends WebTestCase
|
||||||
{
|
{
|
||||||
protected $handler;
|
protected $handler;
|
||||||
|
|
||||||
@ -14,21 +14,23 @@ class SymfonyValidationHandlerTest extends WebTestCase
|
|||||||
$container = $this->getContainer();
|
$container = $this->getContainer();
|
||||||
$factory = $container->get('validator.mapping.class_metadata_factory');
|
$factory = $container->get('validator.mapping.class_metadata_factory');
|
||||||
|
|
||||||
$this->handler = new SymfonyValidationHandler($factory);
|
$this->parser = new ValidationParser($factory);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @dataProvider dataTestHandler
|
* @dataProvider dataTestParser
|
||||||
*/
|
*/
|
||||||
public function testHandler($property, $expected)
|
public function testParser($property, $expected)
|
||||||
{
|
{
|
||||||
$result = $this->handler->handle('Nelmio\ApiDocBundle\Tests\Fixtures\Model\ValidatorTest', $property, array());
|
$result = $this->parser->parse(array('class' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Model\ValidatorTest'));
|
||||||
|
|
||||||
$this->assertEquals($expected, $result);
|
foreach($expected as $name => $value) {
|
||||||
|
$this->assertEquals($value, $expected[$name]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public function dataTestHandler()
|
public function dataTestParser()
|
||||||
{
|
{
|
||||||
return array(
|
return array(
|
||||||
array(
|
array(
|
Loading…
x
Reference in New Issue
Block a user