[FrameworkBundle] Move Validator configuration to PHP

This commit is contained in:
simivar 2020-06-11 16:36:13 +02:00
parent 813d220aa1
commit 46de8900f0
5 changed files with 140 additions and 99 deletions

View File

@ -364,7 +364,7 @@ class FrameworkExtension extends Extension
}
$propertyInfoEnabled = $this->isConfigEnabled($container, $config['property_info']);
$this->registerValidationConfiguration($config['validation'], $container, $loader, $propertyInfoEnabled);
$this->registerValidationConfiguration($config['validation'], $container, $phpLoader, $propertyInfoEnabled);
$this->registerEsiConfiguration($config['esi'], $container, $loader);
$this->registerSsiConfiguration($config['ssi'], $container, $phpLoader);
$this->registerFragmentsConfiguration($config['fragments'], $container, $phpLoader);
@ -586,7 +586,7 @@ class FrameworkExtension extends Extension
}
if ($this->validatorConfigEnabled) {
$loader->load('validator_debug.xml');
$phpLoader->load('validator_debug.php');
}
if ($this->translationConfigEnabled) {
@ -1195,7 +1195,7 @@ class FrameworkExtension extends Extension
}
}
private function registerValidationConfiguration(array $config, ContainerBuilder $container, XmlFileLoader $loader, bool $propertyInfoEnabled)
private function registerValidationConfiguration(array $config, ContainerBuilder $container, PhpFileLoader $loader, bool $propertyInfoEnabled)
{
if (!$this->validatorConfigEnabled = $this->isConfigEnabled($container, $config)) {
return;
@ -1209,7 +1209,7 @@ class FrameworkExtension extends Extension
$config['email_validation_mode'] = 'loose';
}
$loader->load('validator.xml');
$loader->load('validator.php');
$validatorBuilder = $container->getDefinition('validator.builder');

View File

@ -0,0 +1,98 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Bundle\FrameworkBundle\CacheWarmer\ValidatorCacheWarmer;
use Symfony\Component\Cache\Adapter\PhpArrayAdapter;
use Symfony\Component\Validator\Constraints\EmailValidator;
use Symfony\Component\Validator\Constraints\ExpressionValidator;
use Symfony\Component\Validator\Constraints\NotCompromisedPasswordValidator;
use Symfony\Component\Validator\ContainerConstraintValidatorFactory;
use Symfony\Component\Validator\Mapping\Loader\PropertyInfoLoader;
use Symfony\Component\Validator\Validation;
use Symfony\Component\Validator\Validator\ValidatorInterface;
use Symfony\Component\Validator\ValidatorBuilder;
return static function (ContainerConfigurator $container) {
$container->parameters()
->set('validator.mapping.cache.file', param('kernel.cache_dir').'/validation.php');
$container->services()
->set('validator', ValidatorInterface::class)
->public()
->factory([service('validator.builder'), 'getValidator'])
->alias(ValidatorInterface::class, 'validator')
->set('validator.builder', ValidatorBuilder::class)
->factory([Validation::class, 'createValidatorBuilder'])
->call('setConstraintValidatorFactory', [
service('validator.validator_factory'),
])
->call('setTranslator', [
service('translator')->ignoreOnInvalid(),
])
->call('setTranslationDomain', [
param('validator.translation_domain'),
])
->alias('validator.mapping.class_metadata_factory', 'validator')
->set('validator.mapping.cache_warmer', ValidatorCacheWarmer::class)
->args([
service('validator.builder'),
param('validator.mapping.cache.file'),
])
->tag('kernel.cache_warmer')
->set('validator.mapping.cache.adapter', PhpArrayAdapter::class)
->factory([PhpArrayAdapter::class, 'create'])
->args([
param('validator.mapping.cache.file'),
service('cache.validator'),
])
->set('validator.validator_factory', ContainerConstraintValidatorFactory::class)
->args([
abstract_arg('Constraint validators locator'),
])
->set('validator.expression', ExpressionValidator::class)
->tag('validator.constraint_validator', [
'alias' => 'validator.expression',
])
->set('validator.email', EmailValidator::class)
->args([
abstract_arg('Default mode'),
])
->tag('validator.constraint_validator', [
'alias' => EmailValidator::class,
])
->set('validator.not_compromised_password', NotCompromisedPasswordValidator::class)
->args([
service('http_client')->nullOnInvalid(),
param('kernel.charset'),
false,
])
->tag('validator.constraint_validator', [
'alias' => NotCompromisedPasswordValidator::class,
])
->set('validator.property_info_loader', PropertyInfoLoader::class)
->args([
service('property_info'),
service('property_info'),
service('property_info'),
])
->tag('validator.auto_mapper')
;
};

View File

@ -1,74 +0,0 @@
<?xml version="1.0" ?>
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd">
<parameters>
<parameter key="validator.mapping.cache.file">%kernel.cache_dir%/validation.php</parameter>
</parameters>
<services>
<defaults public="false" />
<service id="validator" class="Symfony\Component\Validator\Validator\ValidatorInterface" public="true">
<factory service="validator.builder" method="getValidator" />
</service>
<service id="Symfony\Component\Validator\Validator\ValidatorInterface" alias="validator" />
<service id="validator.builder" class="Symfony\Component\Validator\ValidatorBuilder">
<factory class="Symfony\Component\Validator\Validation" method="createValidatorBuilder" />
<call method="setConstraintValidatorFactory">
<argument type="service" id="validator.validator_factory" />
</call>
<call method="setTranslator">
<argument type="service" id="translator" on-invalid="ignore" />
</call>
<call method="setTranslationDomain">
<argument>%validator.translation_domain%</argument>
</call>
</service>
<service id="validator.mapping.class_metadata_factory" alias="validator" />
<service id="validator.mapping.cache_warmer" class="Symfony\Bundle\FrameworkBundle\CacheWarmer\ValidatorCacheWarmer">
<argument type="service" id="validator.builder" />
<argument>%validator.mapping.cache.file%</argument>
<tag name="kernel.cache_warmer" />
</service>
<service id="validator.mapping.cache.adapter" class="Symfony\Component\Cache\Adapter\PhpArrayAdapter">
<factory class="Symfony\Component\Cache\Adapter\PhpArrayAdapter" method="create" />
<argument>%validator.mapping.cache.file%</argument>
<argument type="service" id="cache.validator" />
</service>
<service id="validator.validator_factory" class="Symfony\Component\Validator\ContainerConstraintValidatorFactory">
<argument /> <!-- Constraint validators locator -->
</service>
<service id="validator.expression" class="Symfony\Component\Validator\Constraints\ExpressionValidator">
<tag name="validator.constraint_validator" alias="validator.expression" />
</service>
<service id="validator.email" class="Symfony\Component\Validator\Constraints\EmailValidator">
<argument></argument>
<tag name="validator.constraint_validator" alias="Symfony\Component\Validator\Constraints\EmailValidator" />
</service>
<service id="validator.not_compromised_password" class="Symfony\Component\Validator\Constraints\NotCompromisedPasswordValidator">
<argument type="service" id="http_client" on-invalid="null" />
<argument>%kernel.charset%</argument>
<argument>false</argument>
<tag name="validator.constraint_validator" alias="Symfony\Component\Validator\Constraints\NotCompromisedPasswordValidator" />
</service>
<service id="validator.property_info_loader" class="Symfony\Component\Validator\Mapping\Loader\PropertyInfoLoader">
<argument type="service" id="property_info" />
<argument type="service" id="property_info" />
<argument type="service" id="property_info" />
<tag name="validator.auto_mapper" />
</service>
</services>
</container>

View File

@ -0,0 +1,38 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\Validator\DataCollector\ValidatorDataCollector;
use Symfony\Component\Validator\Validator\TraceableValidator;
return static function (ContainerConfigurator $container) {
$container->services()
->set('debug.validator', TraceableValidator::class)
->decorate('validator', null, 255)
->args([
service('debug.validator.inner'),
])
->tag('kernel.reset', [
'method' => 'reset',
])
->set('data_collector.validator', ValidatorDataCollector::class)
->args([
service('debug.validator'),
])
->tag('data_collector', [
'template' => '@WebProfiler/Collector/validator.html.twig',
'id' => 'validator',
'priority' => 320,
])
;
};

View File

@ -1,21 +0,0 @@
<?xml version="1.0" ?>
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd">
<services>
<defaults public="false" />
<service id="debug.validator" decorates="validator" decoration-priority="255" class="Symfony\Component\Validator\Validator\TraceableValidator">
<argument type="service" id="debug.validator.inner" />
<tag name="kernel.reset" method="reset" />
</service>
<!-- DataCollector -->
<service id="data_collector.validator" class="Symfony\Component\Validator\DataCollector\ValidatorDataCollector">
<argument type="service" id="debug.validator"/>
<tag name="data_collector" template="@WebProfiler/Collector/validator.html.twig" id="validator" priority="320" />
</service>
</services>
</container>