mirror of
https://github.com/retailcrm/NelmioApiDocBundle.git
synced 2025-02-02 15:51:48 +03:00
Merge pull request #5 from grigoryangeo/master
validation with considering groups
This commit is contained in:
commit
25ac3dd92b
@ -69,7 +69,12 @@ class ValidationParser implements ParserInterface, PostParserInterface
|
|||||||
{
|
{
|
||||||
$className = $input['class'];
|
$className = $input['class'];
|
||||||
|
|
||||||
$result = $this->doParse($className, array());
|
$groups = array();
|
||||||
|
if (isset($input["groups"]) && $input["groups"]) {
|
||||||
|
$groups = $input["groups"];
|
||||||
|
}
|
||||||
|
|
||||||
|
$result = $this->doParse($className, array(), $groups);
|
||||||
|
|
||||||
if (!isset($input['name'])) {
|
if (!isset($input['name'])) {
|
||||||
return $result;
|
return $result;
|
||||||
@ -100,9 +105,10 @@ class ValidationParser implements ParserInterface, PostParserInterface
|
|||||||
*
|
*
|
||||||
* @param $className
|
* @param $className
|
||||||
* @param array $visited
|
* @param array $visited
|
||||||
|
* @param array $groups
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
protected function doParse($className, array $visited)
|
protected function doParse($className, array $visited, array $groups = array())
|
||||||
{
|
{
|
||||||
$params = array();
|
$params = array();
|
||||||
$classdata = $this->factory->getMetadataFor($className);
|
$classdata = $this->factory->getMetadataFor($className);
|
||||||
@ -121,7 +127,7 @@ class ValidationParser implements ParserInterface, PostParserInterface
|
|||||||
$constraints = $propdata->getConstraints();
|
$constraints = $propdata->getConstraints();
|
||||||
|
|
||||||
foreach ($constraints as $constraint) {
|
foreach ($constraints as $constraint) {
|
||||||
$vparams = $this->parseConstraint($constraint, $vparams, $className, $visited);
|
$vparams = $this->parseConstraint($constraint, $vparams, $className, $visited, $groups);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -138,7 +144,7 @@ class ValidationParser implements ParserInterface, PostParserInterface
|
|||||||
// check for nested classes with All constraint
|
// check for nested classes with All constraint
|
||||||
if (isset($vparams['class']) && !in_array($vparams['class'], $visited) && null !== $this->factory->getMetadataFor($vparams['class'])) {
|
if (isset($vparams['class']) && !in_array($vparams['class'], $visited) && null !== $this->factory->getMetadataFor($vparams['class'])) {
|
||||||
$visited[] = $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;
|
$vparams['actualType'] = isset($vparams['actualType']) ? $vparams['actualType'] : DataTypes::STRING;
|
||||||
@ -154,9 +160,14 @@ class ValidationParser implements ParserInterface, PostParserInterface
|
|||||||
*/
|
*/
|
||||||
public function postParse(array $input, array $parameters)
|
public function postParse(array $input, array $parameters)
|
||||||
{
|
{
|
||||||
|
$groups = [];
|
||||||
|
if (isset($input["groups"]) && $input["groups"]) {
|
||||||
|
$groups = $input["groups"];
|
||||||
|
}
|
||||||
|
|
||||||
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'], "groups" => $groups);
|
||||||
$parameters[$param]['children'] = array_merge(
|
$parameters[$param]['children'] = array_merge(
|
||||||
$parameters[$param]['children'], $this->postParse($input, $parameters[$param]['children'])
|
$parameters[$param]['children'], $this->postParse($input, $parameters[$param]['children'])
|
||||||
);
|
);
|
||||||
@ -183,14 +194,34 @@ class ValidationParser implements ParserInterface, PostParserInterface
|
|||||||
*
|
*
|
||||||
* @param Constraint $constraint The constraint metadata object.
|
* @param Constraint $constraint The constraint metadata object.
|
||||||
* @param array $vparams The existing validation parameters.
|
* @param array $vparams The existing validation parameters.
|
||||||
|
* @param array $groups Validation groups.
|
||||||
* @return mixed The parsed list of validation parameters.
|
* @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\\'));
|
$class = substr(get_class($constraint), strlen('Symfony\\Component\\Validator\\Constraints\\'));
|
||||||
|
|
||||||
$vparams['actualType'] = DataTypes::STRING;
|
$vparams['actualType'] = DataTypes::STRING;
|
||||||
$vparams['subType'] = null;
|
$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) {
|
switch ($class) {
|
||||||
case 'NotBlank':
|
case 'NotBlank':
|
||||||
|
Loading…
x
Reference in New Issue
Block a user