mirror of
https://github.com/retailcrm/NelmioApiDocBundle.git
synced 2025-02-02 07:41:43 +03:00
Validation with considering groups
This commit is contained in:
parent
d78f8887a9
commit
39d640cce8
@ -73,7 +73,12 @@ class ValidationParser implements ParserInterface, PostParserInterface
|
||||
{
|
||||
$className = $input['class'];
|
||||
|
||||
$parsed = $this->doParse($className, array());
|
||||
$groups = array();
|
||||
if (isset($input["groups"]) && $input["groups"]) {
|
||||
$groups = $input["groups"];
|
||||
}
|
||||
|
||||
$parsed = $this->doParse($className, array(), $groups);
|
||||
|
||||
if (!isset($input['name']) || empty($input['name'])) {
|
||||
return $parsed;
|
||||
@ -105,9 +110,10 @@ class ValidationParser implements ParserInterface, PostParserInterface
|
||||
*
|
||||
* @param $className
|
||||
* @param array $visited
|
||||
* @param array $groups
|
||||
* @return array
|
||||
*/
|
||||
protected function doParse($className, array $visited)
|
||||
protected function doParse($className, array $visited, array $groups = array())
|
||||
{
|
||||
$params = array();
|
||||
$classdata = $this->factory->getMetadataFor($className);
|
||||
@ -126,7 +132,7 @@ class ValidationParser implements ParserInterface, PostParserInterface
|
||||
$constraints = $propdata->getConstraints();
|
||||
|
||||
foreach ($constraints as $constraint) {
|
||||
$vparams = $this->parseConstraint($constraint, $vparams, $className, $visited);
|
||||
$vparams = $this->parseConstraint($constraint, $vparams, $className, $visited, $groups);
|
||||
}
|
||||
}
|
||||
|
||||
@ -143,7 +149,7 @@ class ValidationParser implements ParserInterface, PostParserInterface
|
||||
// check for nested classes with All constraint
|
||||
if (isset($vparams['class']) && !in_array($vparams['class'], $visited) && null !== $this->factory->getMetadataFor($vparams['class'])) {
|
||||
$visited[] = $vparams['class'];
|
||||
$vparams['children'] = $this->doParse($vparams['class'], $visited);
|
||||
$vparams['children'] = $this->doParse($vparams['class'], $visited, $groups);
|
||||
}
|
||||
|
||||
$vparams['actualType'] = isset($vparams['actualType']) ? $vparams['actualType'] : DataTypes::STRING;
|
||||
@ -159,9 +165,14 @@ class ValidationParser implements ParserInterface, PostParserInterface
|
||||
*/
|
||||
public function postParse(array $input, array $parameters)
|
||||
{
|
||||
$groups = [];
|
||||
if (isset($input["groups"]) && $input["groups"]) {
|
||||
$groups = $input["groups"];
|
||||
}
|
||||
|
||||
foreach ($parameters as $param => $data) {
|
||||
if (isset($data['class']) && isset($data['children'])) {
|
||||
$input = array('class' => $data['class']);
|
||||
$input = array('class' => $data['class'], "groups" => $groups);
|
||||
$parameters[$param]['children'] = array_merge(
|
||||
$parameters[$param]['children'], $this->postParse($input, $parameters[$param]['children'])
|
||||
);
|
||||
@ -188,14 +199,34 @@ class ValidationParser implements ParserInterface, PostParserInterface
|
||||
*
|
||||
* @param Constraint $constraint The constraint metadata object.
|
||||
* @param array $vparams The existing validation parameters.
|
||||
* @param array $groups Validation groups.
|
||||
* @return mixed The parsed list of validation parameters.
|
||||
*/
|
||||
protected function parseConstraint(Constraint $constraint, $vparams, $className, &$visited = array())
|
||||
protected function parseConstraint(
|
||||
Constraint $constraint,
|
||||
$vparams,
|
||||
$className,
|
||||
&$visited = array(),
|
||||
array $groups = array()
|
||||
)
|
||||
{
|
||||
$class = substr(get_class($constraint), strlen('Symfony\\Component\\Validator\\Constraints\\'));
|
||||
|
||||
$vparams['actualType'] = DataTypes::STRING;
|
||||
$vparams['subType'] = null;
|
||||
$vparams['groups'] = $constraint->groups;
|
||||
|
||||
if ($groups) {
|
||||
$containGroup = false;
|
||||
foreach ($groups as $group) {
|
||||
if (in_array($group, $vparams['groups'])) {
|
||||
$containGroup = true;
|
||||
}
|
||||
}
|
||||
if (!$containGroup) {
|
||||
return $vparams;
|
||||
}
|
||||
}
|
||||
|
||||
switch ($class) {
|
||||
case 'NotBlank':
|
||||
|
@ -396,6 +396,7 @@ With multiple lines.',
|
||||
'required' => true,
|
||||
'dataType' => 'string',
|
||||
'readonly' => NULL,
|
||||
'groups' => array ('Default', 'Test'),
|
||||
),
|
||||
'b' =>
|
||||
array (
|
||||
@ -405,6 +406,7 @@ With multiple lines.',
|
||||
'dataType' => 'DateTime',
|
||||
'readonly' => NULL,
|
||||
'required' => NULL,
|
||||
'groups' => array ('Default', 'Test'),
|
||||
),
|
||||
),
|
||||
),
|
||||
@ -2177,6 +2179,7 @@ With multiple lines.',
|
||||
'dataType' => 'DateTime',
|
||||
'readonly' => NULL,
|
||||
'required' => NULL,
|
||||
'groups' => array ('Default', 'MultipleTest'),
|
||||
),
|
||||
'objects' =>
|
||||
array (
|
||||
@ -2195,6 +2198,7 @@ With multiple lines.',
|
||||
'required' => true,
|
||||
'dataType' => 'string',
|
||||
'readonly' => NULL,
|
||||
'groups' => array ('Default', 'Test'),
|
||||
'parentClass' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Model\Test',
|
||||
'field' => 'a',
|
||||
),
|
||||
@ -2206,12 +2210,14 @@ With multiple lines.',
|
||||
'dataType' => 'DateTime',
|
||||
'readonly' => NULL,
|
||||
'required' => NULL,
|
||||
'groups' => array ('Default', 'Test'),
|
||||
'parentClass' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Model\Test',
|
||||
'field' => 'b',
|
||||
),
|
||||
),
|
||||
'readonly' => NULL,
|
||||
'required' => NULL,
|
||||
'groups' => array ('Default', 'MultipleTest'),
|
||||
),
|
||||
'number' =>
|
||||
array (
|
||||
@ -2247,6 +2253,7 @@ With multiple lines.',
|
||||
'required' => true,
|
||||
'dataType' => 'string',
|
||||
'readonly' => NULL,
|
||||
'groups' => array ('Default', 'Test'),
|
||||
'parentClass' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Model\Test',
|
||||
'field' => 'a',
|
||||
),
|
||||
@ -2258,6 +2265,7 @@ With multiple lines.',
|
||||
'dataType' => 'DateTime',
|
||||
'readonly' => NULL,
|
||||
'required' => NULL,
|
||||
'groups' => array ('Default', 'Test'),
|
||||
'parentClass' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Model\Test',
|
||||
'field' => 'b',
|
||||
),
|
||||
@ -2339,6 +2347,7 @@ With multiple lines.',
|
||||
'dataType' => 'DateTime',
|
||||
'readonly' => NULL,
|
||||
'required' => NULL,
|
||||
'groups' => array ('Default', 'MultipleTest'),
|
||||
),
|
||||
'objects' =>
|
||||
array (
|
||||
@ -2346,6 +2355,7 @@ With multiple lines.',
|
||||
'actualType' => 'collection',
|
||||
'subType' => 'Nelmio\\ApiDocBundle\\Tests\\Fixtures\\Model\\Test',
|
||||
'dataType' => 'array of objects (Test)',
|
||||
'groups' => array('Default', 'MultipleTest'),
|
||||
'children' =>
|
||||
array (
|
||||
'a' =>
|
||||
@ -2357,6 +2367,7 @@ With multiple lines.',
|
||||
'required' => true,
|
||||
'dataType' => 'string',
|
||||
'readonly' => NULL,
|
||||
'groups' => array ('Default', 'Test'),
|
||||
'parentClass' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Model\Test',
|
||||
'field' => 'a',
|
||||
),
|
||||
@ -2368,6 +2379,7 @@ With multiple lines.',
|
||||
'dataType' => 'DateTime',
|
||||
'readonly' => NULL,
|
||||
'required' => NULL,
|
||||
'groups' => array ('Default', 'Test'),
|
||||
'parentClass' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Model\Test',
|
||||
'field' => 'b',
|
||||
),
|
||||
@ -2409,6 +2421,7 @@ With multiple lines.',
|
||||
'required' => true,
|
||||
'dataType' => 'string',
|
||||
'readonly' => NULL,
|
||||
'groups' => array ('Default', 'Test'),
|
||||
'parentClass' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Model\Test',
|
||||
'field' => 'a',
|
||||
),
|
||||
@ -2420,6 +2433,7 @@ With multiple lines.',
|
||||
'dataType' => 'DateTime',
|
||||
'readonly' => NULL,
|
||||
'required' => NULL,
|
||||
'groups' => array ('Default', 'Test'),
|
||||
'parentClass' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Model\Test',
|
||||
'field' => 'b',
|
||||
),
|
||||
|
@ -389,6 +389,7 @@ With multiple lines.',
|
||||
'required' => true,
|
||||
'dataType' => 'string',
|
||||
'readonly' => NULL,
|
||||
'groups' => array('Default', 'Test'),
|
||||
),
|
||||
'b' =>
|
||||
array (
|
||||
@ -398,6 +399,7 @@ With multiple lines.',
|
||||
'dataType' => 'DateTime',
|
||||
'readonly' => NULL,
|
||||
'required' => NULL,
|
||||
'groups' => array('Default', 'Test'),
|
||||
),
|
||||
),
|
||||
),
|
||||
@ -2331,6 +2333,7 @@ With multiple lines.',
|
||||
'dataType' => 'DateTime',
|
||||
'readonly' => NULL,
|
||||
'required' => NULL,
|
||||
'groups' => array('Default', 'MultipleTest'),
|
||||
),
|
||||
'objects' =>
|
||||
array (
|
||||
@ -2351,6 +2354,7 @@ With multiple lines.',
|
||||
'readonly' => NULL,
|
||||
'parentClass' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Model\Test',
|
||||
'field' => 'a',
|
||||
'groups' => array('Default', 'Test'),
|
||||
),
|
||||
'b' =>
|
||||
array (
|
||||
@ -2362,10 +2366,12 @@ With multiple lines.',
|
||||
'required' => NULL,
|
||||
'parentClass' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Model\Test',
|
||||
'field' => 'b',
|
||||
'groups' => array('Default', 'Test'),
|
||||
),
|
||||
),
|
||||
'readonly' => NULL,
|
||||
'required' => NULL,
|
||||
'groups' => array('Default', 'MultipleTest'),
|
||||
),
|
||||
'number' =>
|
||||
array (
|
||||
@ -2403,6 +2409,7 @@ With multiple lines.',
|
||||
'readonly' => NULL,
|
||||
'parentClass' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Model\Test',
|
||||
'field' => 'a',
|
||||
'groups' => array('Default', 'Test'),
|
||||
),
|
||||
'b' =>
|
||||
array (
|
||||
@ -2414,6 +2421,7 @@ With multiple lines.',
|
||||
'required' => NULL,
|
||||
'parentClass' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Model\Test',
|
||||
'field' => 'b',
|
||||
'groups' => array('Default', 'Test'),
|
||||
),
|
||||
),
|
||||
),
|
||||
@ -2493,6 +2501,7 @@ With multiple lines.',
|
||||
'dataType' => 'DateTime',
|
||||
'readonly' => NULL,
|
||||
'required' => NULL,
|
||||
'groups' => array('Default', 'MultipleTest'),
|
||||
),
|
||||
'objects' =>
|
||||
array (
|
||||
@ -2513,6 +2522,7 @@ With multiple lines.',
|
||||
'readonly' => NULL,
|
||||
'parentClass' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Model\Test',
|
||||
'field' => 'a',
|
||||
'groups' => array('Default', 'Test'),
|
||||
),
|
||||
'b' =>
|
||||
array (
|
||||
@ -2524,10 +2534,12 @@ With multiple lines.',
|
||||
'required' => NULL,
|
||||
'parentClass' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Model\Test',
|
||||
'field' => 'b',
|
||||
'groups' => array('Default', 'Test'),
|
||||
),
|
||||
),
|
||||
'readonly' => NULL,
|
||||
'required' => NULL,
|
||||
'groups' => array('Default', 'MultipleTest'),
|
||||
),
|
||||
'number' =>
|
||||
array (
|
||||
@ -2565,6 +2577,7 @@ With multiple lines.',
|
||||
'readonly' => NULL,
|
||||
'parentClass' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Model\Test',
|
||||
'field' => 'a',
|
||||
'groups' => array('Default', 'Test'),
|
||||
),
|
||||
'b' =>
|
||||
array (
|
||||
@ -2576,6 +2589,7 @@ With multiple lines.',
|
||||
'required' => NULL,
|
||||
'parentClass' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Model\Test',
|
||||
'field' => 'b',
|
||||
'groups' => array('Default', 'Test'),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
Loading…
x
Reference in New Issue
Block a user