protected function validateOfProperties(&$value, $schema, JsonPointer $path, $i = '')
    {
        // Verify type
        if ($value instanceof self) {
            return;
        }

        if (isset($schema->allOf)) {
            $isValid = true;
            foreach ($schema->allOf as $allOf) {
                $initErrors = $this->getErrors();
                $this->checkUndefined($value, $allOf, $path, $i);
                $isValid = $isValid && (count($this->getErrors()) == count($initErrors));
            }
            if (!$isValid) {
                $this->addError(ConstraintError::ALL_OF(), $path);
            }
        }

        if (isset($schema->anyOf)) {
            $isValid = false;
            $startErrors = $this->getErrors();
            $caughtException = null;
            foreach ($schema->anyOf as $anyOf) {
                $initErrors = $this->getErrors();
                try {
                    $this->checkUndefined($value, $anyOf, $path, $i);
                    if ($isValid = (count($this->getErrors()) == count($initErrors))) {
                        break;
                    }
                } catch (ValidationException $e) {
                    $isValid = false;
                }
            }
            if (!$isValid) {
                $this->addError(ConstraintError::ANY_OF(), $path);
            } else {
                $this->errors = $startErrors;
            }
        }

        if (isset($schema->oneOf)) {
            $allErrors = array();
            $matchedSchemas = 0;
            $startErrors = $this->getErrors();
            foreach ($schema->oneOf as $oneOf) {
                try {
                    $this->errors = array();
                    $this->checkUndefined($value, $oneOf, $path, $i);
                    if (count($this->getErrors()) == 0) {
                        $matchedSchemas++;
                    }
                    $allErrors = array_merge($allErrors, array_values($this->getErrors()));
                } catch (ValidationException $e) {
                    // deliberately do nothing here - validation failed, but we want to check
                    // other schema options in the OneOf field.
                }
            }
            if ($matchedSchemas !== 1) {
                $this->addErrors(array_merge($allErrors, $startErrors));
                $this->addError(ConstraintError::ONE_OF(), $path);
            } else {
                $this->errors = $startErrors;
            }
        }
    }
protected function validateOfProperties(&$value, $schema, JsonPointer $path, $i = '')
    {
        // Verify type
        if ($value instanceof self) {
            return;
        }

        if (isset($schema->allOf)) {
            $isValid = true;
            foreach ($schema->allOf as $allOf) {
                $initErrors = $this->getErrors();
                $this->checkUndefined($value, $allOf, $path, $i);
                $isValid = $isValid && (count($this->getErrors()) == count($initErrors));
            }
            if (!$isValid) {
                $this->addError(ConstraintError::ALL_OF(), $path);
            }
        }

        if (isset($schema->anyOf)) {
            $isValid = false;
            $startErrors = $this->getErrors();
            $caughtException = null;
            foreach ($schema->anyOf as $anyOf) {
                $initErrors = $this->getErrors();
                try {
                    $this->checkUndefined($value, $anyOf, $path, $i);
                    if ($isValid = (count($this->getErrors()) == count($initErrors))) {
                        break;
                    }
                } catch (ValidationException $e) {
                    $isValid = false;
                }
            }
            if (!$isValid) {
                $this->addError(ConstraintError::ANY_OF(), $path);
            } else {
                $this->errors = $startErrors;
            }
        }

        if (isset($schema->oneOf)) {
            $allErrors = array();
            $matchedSchemas = 0;
            $startErrors = $this->getErrors();
            foreach ($schema->oneOf as $oneOf) {
                try {
                    $this->errors = array();
                    $this->checkUndefined($value, $oneOf, $path, $i);
                    if (count($this->getErrors()) == 0) {
                        $matchedSchemas++;
                    }
                    $allErrors = array_merge($allErrors, array_values($this->getErrors()));
                } catch (ValidationException $e) {
                    // deliberately do nothing here - validation failed, but we want to check
                    // other schema options in the OneOf field.
                }
            }
            if ($matchedSchemas !== 1) {
                $this->addErrors(array_merge($allErrors, $startErrors));
                $this->addError(ConstraintError::ONE_OF(), $path);
            } else {
                $this->errors = $startErrors;
            }
        }
    }
protected function validateOfProperties ( & $ value , $ schema , JsonPointer $ path , $ i = '' ) { // Verify type if ( $ value instanceof self ) { return ; } if ( isset ( $ schema -> allOf ) ) { $ isValid = true ; foreach ( $ schema -> allOf as $ allOf ) { $ initErrors = $ this -> getErrors ( ) ; $ this -> checkUndefined ( $ value , $ allOf , $ path , $ i ) ; $ isValid = $ isValid && ( count ( $ this -> getErrors ( ) ) == count ( $ initErrors ) ) ; } if ( ! $ isValid ) { $ this -> addError ( ConstraintError :: ALL_OF ( ) , $ path ) ; } } if ( isset ( $ schema -> anyOf ) ) { $ isValid = false ; $ startErrors = $ this -> getErrors ( ) ; $ caughtException = null ; foreach ( $ schema -> anyOf as $ anyOf ) { $ initErrors = $ this -> getErrors ( ) ; try { $ this -> checkUndefined ( $ value , $ anyOf , $ path , $ i ) ; if ( $ isValid = ( count ( $ this -> getErrors ( ) ) == count ( $ initErrors ) ) ) { break ; } } catch ( ValidationException $ e ) { $ isValid = false ; } } if ( ! $ isValid ) { $ this -> addError ( ConstraintError :: ANY_OF ( ) , $ path ) ; } else { $ this -> errors = $ startErrors ; } } if ( isset ( $ schema -> oneOf ) ) { $ allErrors = array ( ) ; $ matchedSchemas = 0 ; $ startErrors = $ this -> getErrors ( ) ; foreach ( $ schema -> oneOf as $ oneOf ) { try { $ this -> errors = array ( ) ; $ this -> checkUndefined ( $ value , $ oneOf , $ path , $ i ) ; if ( count ( $ this -> getErrors ( ) ) == 0 ) { $ matchedSchemas ++ ; } $ allErrors = array_merge ( $ allErrors , array_values ( $ this -> getErrors ( ) ) ) ; } catch ( ValidationException $ e ) { // deliberately do nothing here - validation failed, but we want to check // other schema options in the OneOf field. } } if ( $ matchedSchemas !== 1 ) { $ this -> addErrors ( array_merge ( $ allErrors , $ startErrors ) ) ; $ this -> addError ( ConstraintError :: ONE_OF ( ) , $ path ) ; } else { $ this -> errors = $ startErrors ; } } }
Validate allOf, anyOf, and oneOf properties

@param mixed       $value
@param mixed       $schema
@param JsonPointer $path
@param string      $i
Validate allOf anyOf and oneOf properties