wol-soft/php-json-schema-model-generator

View on GitHub
src/Templates/Validator/AdditionalProperties.phptpl

Summary

Maintainability
Test Coverage
(function () use ($properties, &$invalidProperties, $modelData) {
    {% if generatorConfiguration.collectErrors() %}
        $originalErrorRegistry = $this->_errorRegistry;
    {% endif %}
    {% if collectAdditionalProperties %}
        $rollbackValues = $this->_additionalProperties;
    {% endif %}

    foreach (array_diff(array_keys($properties), {{ additionalProperties }}) as $propertyKey) {
        {% if patternProperties %}
            foreach ({{ patternProperties }} as $pattern) {
                if (preg_match("/$pattern/", $property)) {
                    continue 2;
                }
            }
        {% endif %}

        try {
            $value = $properties[$propertyKey];

            {% if generatorConfiguration.collectErrors() %}
                $this->_errorRegistry = new {{ viewHelper.getSimpleClassName(generatorConfiguration.getErrorRegistryClass()) }}();
            {% endif %}

            {{ viewHelper.resolvePropertyDecorator(validationProperty) }}

            {% foreach validationProperty.getOrderedValidators() as validator %}
                {{ viewHelper.renderValidator(validator, schema) }}
            {% endforeach %}

            {% if generatorConfiguration.collectErrors() %}
                if ($this->_errorRegistry->getErrors()) {
                    $invalidProperties[$propertyKey] = $this->_errorRegistry->getErrors();
                }
            {% endif %}

            {% if collectAdditionalProperties %}
                $this->_additionalProperties[$propertyKey] = $value;
            {% endif %}
        } catch (\Exception $e) {
            // collect all errors concerning invalid additional properties
            isset($invalidProperties[$propertyKey])
                ? $invalidProperties[$propertyKey][] = $e
                : $invalidProperties[$propertyKey] = [$e];
        }
    }

    {% if generatorConfiguration.collectErrors() %}
        $this->_errorRegistry = $originalErrorRegistry;
    {% endif %}

    {% if collectAdditionalProperties %}
        if (!empty($invalidProperties)) {
            $this->_additionalProperties = $rollbackValues;
        }
    {% endif %}

    return !empty($invalidProperties);
})()