minor #37302 [Form] Move configuration to PHP (misekai)
This PR was squashed before being merged into the 5.2-dev branch.
Discussion
----------
[Form] Move configuration to PHP
| Q | A
| ------------- | ---
| Branch? | master for features / 3.4, 4.4, 5.0 or 5.1 for bug fixes <!-- see below -->
| Bug fix? | no
| New feature? | no
| Deprecations? | no
| Tickets | Part of #37186
| License | MIT
| Doc PR | -
Commits
-------
9e2e8eeb29
[Form] Move configuration to PHP
This commit is contained in:
commit
40890b14e4
@ -303,7 +303,7 @@ class FrameworkExtension extends Extension
|
||||
}
|
||||
|
||||
$this->formConfigEnabled = true;
|
||||
$this->registerFormConfiguration($config, $container, $loader);
|
||||
$this->registerFormConfiguration($config, $container, $phpLoader);
|
||||
|
||||
if (class_exists('Symfony\Component\Validator\Validation')) {
|
||||
$config['validation']['enabled'] = true;
|
||||
@ -513,16 +513,16 @@ class FrameworkExtension extends Extension
|
||||
return new Configuration($container->getParameter('kernel.debug'));
|
||||
}
|
||||
|
||||
private function registerFormConfiguration(array $config, ContainerBuilder $container, XmlFileLoader $loader)
|
||||
private function registerFormConfiguration(array $config, ContainerBuilder $container, PhpFileLoader $loader)
|
||||
{
|
||||
$loader->load('form.xml');
|
||||
$loader->load('form.php');
|
||||
|
||||
if (null === $config['form']['csrf_protection']['enabled']) {
|
||||
$config['form']['csrf_protection']['enabled'] = $config['csrf_protection']['enabled'];
|
||||
}
|
||||
|
||||
if ($this->isConfigEnabled($container, $config['form']['csrf_protection'])) {
|
||||
$loader->load('form_csrf.xml');
|
||||
$loader->load('form_csrf.php');
|
||||
|
||||
$container->setParameter('form.type_extension.csrf.enabled', true);
|
||||
$container->setParameter('form.type_extension.csrf.field_name', $config['form']['csrf_protection']['field_name']);
|
||||
@ -604,7 +604,7 @@ class FrameworkExtension extends Extension
|
||||
$phpLoader->load('cache_debug.php');
|
||||
|
||||
if ($this->formConfigEnabled) {
|
||||
$loader->load('form_debug.xml');
|
||||
$phpLoader->load('form_debug.php');
|
||||
}
|
||||
|
||||
if ($this->validatorConfigEnabled) {
|
||||
|
142
src/Symfony/Bundle/FrameworkBundle/Resources/config/form.php
Normal file
142
src/Symfony/Bundle/FrameworkBundle/Resources/config/form.php
Normal file
@ -0,0 +1,142 @@
|
||||
<?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\Form\ChoiceList\Factory\CachingFactoryDecorator;
|
||||
use Symfony\Component\Form\ChoiceList\Factory\DefaultChoiceListFactory;
|
||||
use Symfony\Component\Form\ChoiceList\Factory\PropertyAccessDecorator;
|
||||
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\ColorType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\FileType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\FormType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\TransformationFailureExtension;
|
||||
use Symfony\Component\Form\Extension\DependencyInjection\DependencyInjectionExtension;
|
||||
use Symfony\Component\Form\Extension\HttpFoundation\HttpFoundationRequestHandler;
|
||||
use Symfony\Component\Form\Extension\HttpFoundation\Type\FormTypeHttpFoundationExtension;
|
||||
use Symfony\Component\Form\Extension\Validator\Type\FormTypeValidatorExtension;
|
||||
use Symfony\Component\Form\Extension\Validator\Type\RepeatedTypeValidatorExtension;
|
||||
use Symfony\Component\Form\Extension\Validator\Type\SubmitTypeValidatorExtension;
|
||||
use Symfony\Component\Form\Extension\Validator\Type\UploadValidatorExtension;
|
||||
use Symfony\Component\Form\Extension\Validator\ValidatorTypeGuesser;
|
||||
use Symfony\Component\Form\FormFactory;
|
||||
use Symfony\Component\Form\FormFactoryInterface;
|
||||
use Symfony\Component\Form\FormRegistry;
|
||||
use Symfony\Component\Form\FormRegistryInterface;
|
||||
use Symfony\Component\Form\ResolvedFormTypeFactory;
|
||||
use Symfony\Component\Form\ResolvedFormTypeFactoryInterface;
|
||||
use Symfony\Component\Form\Util\ServerParams;
|
||||
|
||||
return static function (ContainerConfigurator $container) {
|
||||
$container->services()
|
||||
->set('form.resolved_type_factory', ResolvedFormTypeFactory::class)
|
||||
|
||||
->alias(ResolvedFormTypeFactoryInterface::class, 'form.resolved_type_factory')
|
||||
|
||||
->set('form.registry', FormRegistry::class)
|
||||
->args([
|
||||
[
|
||||
/*
|
||||
* We don't need to be able to add more extensions.
|
||||
* more types can be registered with the form.type tag
|
||||
* more type extensions can be registered with the form.type_extension tag
|
||||
* more type_guessers can be registered with the form.type_guesser tag
|
||||
*/
|
||||
service('form.extension'),
|
||||
],
|
||||
service('form.resolved_type_factory'),
|
||||
])
|
||||
|
||||
->alias(FormRegistryInterface::class, 'form.registry')
|
||||
|
||||
->set('form.factory', FormFactory::class)
|
||||
->public()
|
||||
->args([service('form.registry')])
|
||||
|
||||
->alias(FormFactoryInterface::class, 'form.factory')
|
||||
|
||||
->set('form.extension', DependencyInjectionExtension::class)
|
||||
->args([
|
||||
abstract_arg('All services with tag "form.type" are stored in a service locator by FormPass'),
|
||||
abstract_arg('All services with tag "form.type_extension" are stored here by FormPass'),
|
||||
abstract_arg('All services with tag "form.type_guesser" are stored here by FormPass'),
|
||||
])
|
||||
|
||||
->set('form.type_guesser.validator', ValidatorTypeGuesser::class)
|
||||
->args([service('validator.mapping.class_metadata_factory')])
|
||||
->tag('form.type_guesser')
|
||||
|
||||
->alias('form.property_accessor', 'property_accessor')
|
||||
|
||||
->set('form.choice_list_factory.default', DefaultChoiceListFactory::class)
|
||||
|
||||
->set('form.choice_list_factory.property_access', PropertyAccessDecorator::class)
|
||||
->args([
|
||||
service('form.choice_list_factory.default'),
|
||||
service('form.property_accessor'),
|
||||
])
|
||||
|
||||
->set('form.choice_list_factory.cached', CachingFactoryDecorator::class)
|
||||
->args([service('form.choice_list_factory.property_access')])
|
||||
->tag('kernel.reset', ['method' => 'reset'])
|
||||
|
||||
->alias('form.choice_list_factory', 'form.choice_list_factory.cached')
|
||||
|
||||
->set('form.type.form', FormType::class)
|
||||
->args([service('form.property_accessor')])
|
||||
->tag('form.type')
|
||||
|
||||
->set('form.type.choice', ChoiceType::class)
|
||||
->args([service('form.choice_list_factory')])
|
||||
->tag('form.type')
|
||||
|
||||
->set('form.type.file', FileType::class)
|
||||
->public()
|
||||
->args([service('translator')->ignoreOnInvalid()])
|
||||
->tag('form.type')
|
||||
|
||||
->set('form.type.color', ColorType::class)
|
||||
->args([service('translator')->ignoreOnInvalid()])
|
||||
->tag('form.type')
|
||||
|
||||
->set('form.type_extension.form.transformation_failure_handling', TransformationFailureExtension::class)
|
||||
->args([service('translator')->ignoreOnInvalid()])
|
||||
->tag('form.type_extension', ['extended-type' => FormType::class])
|
||||
|
||||
->set('form.type_extension.form.http_foundation', FormTypeHttpFoundationExtension::class)
|
||||
->args([service('form.type_extension.form.request_handler')])
|
||||
->tag('form.type_extension')
|
||||
|
||||
->set('form.type_extension.form.request_handler', HttpFoundationRequestHandler::class)
|
||||
->args([service('form.server_params')])
|
||||
|
||||
->set('form.server_params', ServerParams::class)
|
||||
->args([service('request_stack')])
|
||||
|
||||
->set('form.type_extension.form.validator', FormTypeValidatorExtension::class)
|
||||
->args([service('validator')])
|
||||
->tag('form.type_extension', ['extended-type' => FormType::class])
|
||||
|
||||
->set('form.type_extension.repeated.validator', RepeatedTypeValidatorExtension::class)
|
||||
->tag('form.type_extension')
|
||||
|
||||
->set('form.type_extension.submit.validator', SubmitTypeValidatorExtension::class)
|
||||
->tag('form.type_extension', ['extended-type' => SubmitType::class])
|
||||
|
||||
->set('form.type_extension.upload.validator', UploadValidatorExtension::class)
|
||||
->args([
|
||||
service('translator'),
|
||||
param('validator.translation_domain'),
|
||||
])
|
||||
->tag('form.type_extension')
|
||||
;
|
||||
};
|
@ -1,119 +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" />
|
||||
|
||||
<!-- ResolvedFormTypeFactory -->
|
||||
<service id="form.resolved_type_factory" class="Symfony\Component\Form\ResolvedFormTypeFactory" />
|
||||
<service id="Symfony\Component\Form\ResolvedFormTypeFactoryInterface" alias="form.resolved_type_factory" />
|
||||
|
||||
<!-- FormRegistry -->
|
||||
<service id="form.registry" class="Symfony\Component\Form\FormRegistry">
|
||||
<argument type="collection">
|
||||
<!--
|
||||
We don't need to be able to add more extensions.
|
||||
* more types can be registered with the form.type tag
|
||||
* more type extensions can be registered with the form.type_extension tag
|
||||
* more type_guessers can be registered with the form.type_guesser tag
|
||||
-->
|
||||
<argument type="service" id="form.extension" />
|
||||
</argument>
|
||||
<argument type="service" id="form.resolved_type_factory" />
|
||||
</service>
|
||||
<service id="Symfony\Component\Form\FormRegistryInterface" alias="form.registry" />
|
||||
|
||||
<!-- FormFactory -->
|
||||
<service id="form.factory" class="Symfony\Component\Form\FormFactory" public="true">
|
||||
<argument type="service" id="form.registry" />
|
||||
</service>
|
||||
<service id="Symfony\Component\Form\FormFactoryInterface" alias="form.factory" />
|
||||
|
||||
<!-- DependencyInjectionExtension -->
|
||||
<service id="form.extension" class="Symfony\Component\Form\Extension\DependencyInjection\DependencyInjectionExtension">
|
||||
<argument /><!-- All services with tag "form.type" are stored in a service locator by FormPass -->
|
||||
<argument type="collection" /><!-- All services with tag "form.type_extension" are stored here by FormPass -->
|
||||
<argument type="iterator" /><!-- All services with tag "form.type_guesser" are stored here by FormPass -->
|
||||
</service>
|
||||
|
||||
<!-- ValidatorTypeGuesser -->
|
||||
<service id="form.type_guesser.validator" class="Symfony\Component\Form\Extension\Validator\ValidatorTypeGuesser">
|
||||
<tag name="form.type_guesser" />
|
||||
<argument type="service" id="validator.mapping.class_metadata_factory" />
|
||||
</service>
|
||||
|
||||
<!-- CoreExtension -->
|
||||
<service id="form.property_accessor" alias="property_accessor" />
|
||||
|
||||
<service id="form.choice_list_factory.default" class="Symfony\Component\Form\ChoiceList\Factory\DefaultChoiceListFactory" />
|
||||
|
||||
<service id="form.choice_list_factory.property_access" class="Symfony\Component\Form\ChoiceList\Factory\PropertyAccessDecorator">
|
||||
<argument type="service" id="form.choice_list_factory.default"/>
|
||||
<argument type="service" id="form.property_accessor"/>
|
||||
</service>
|
||||
|
||||
<service id="form.choice_list_factory.cached" class="Symfony\Component\Form\ChoiceList\Factory\CachingFactoryDecorator">
|
||||
<argument type="service" id="form.choice_list_factory.property_access"/>
|
||||
<tag name="kernel.reset" method="reset" />
|
||||
</service>
|
||||
|
||||
<service id="form.choice_list_factory" alias="form.choice_list_factory.cached" />
|
||||
|
||||
<service id="form.type.form" class="Symfony\Component\Form\Extension\Core\Type\FormType">
|
||||
<argument type="service" id="form.property_accessor" />
|
||||
<tag name="form.type" />
|
||||
</service>
|
||||
<service id="form.type.choice" class="Symfony\Component\Form\Extension\Core\Type\ChoiceType">
|
||||
<tag name="form.type" />
|
||||
<argument type="service" id="form.choice_list_factory"/>
|
||||
</service>
|
||||
<service id="form.type.file" class="Symfony\Component\Form\Extension\Core\Type\FileType" public="true">
|
||||
<tag name="form.type" />
|
||||
<argument type="service" id="translator" on-invalid="ignore" />
|
||||
</service>
|
||||
<service id="form.type.color" class="Symfony\Component\Form\Extension\Core\Type\ColorType">
|
||||
<tag name="form.type" />
|
||||
<argument type="service" id="translator" on-invalid="ignore" />
|
||||
</service>
|
||||
|
||||
<service id="form.type_extension.form.transformation_failure_handling" class="Symfony\Component\Form\Extension\Core\Type\TransformationFailureExtension">
|
||||
<tag name="form.type_extension" extended-type="Symfony\Component\Form\Extension\Core\Type\FormType" />
|
||||
<argument type="service" id="translator" on-invalid="ignore" />
|
||||
</service>
|
||||
|
||||
<!-- FormTypeHttpFoundationExtension -->
|
||||
<service id="form.type_extension.form.http_foundation" class="Symfony\Component\Form\Extension\HttpFoundation\Type\FormTypeHttpFoundationExtension">
|
||||
<argument type="service" id="form.type_extension.form.request_handler" />
|
||||
<tag name="form.type_extension" />
|
||||
</service>
|
||||
|
||||
<!-- HttpFoundationRequestHandler -->
|
||||
<service id="form.type_extension.form.request_handler" class="Symfony\Component\Form\Extension\HttpFoundation\HttpFoundationRequestHandler">
|
||||
<argument type="service" id="form.server_params" />
|
||||
</service>
|
||||
|
||||
<service id="form.server_params" class="Symfony\Component\Form\Util\ServerParams">
|
||||
<argument type="service" id="request_stack" />
|
||||
</service>
|
||||
|
||||
<!-- FormTypeValidatorExtension -->
|
||||
<service id="form.type_extension.form.validator" class="Symfony\Component\Form\Extension\Validator\Type\FormTypeValidatorExtension">
|
||||
<tag name="form.type_extension" extended-type="Symfony\Component\Form\Extension\Core\Type\FormType" />
|
||||
<argument type="service" id="validator" />
|
||||
</service>
|
||||
<service id="form.type_extension.repeated.validator" class="Symfony\Component\Form\Extension\Validator\Type\RepeatedTypeValidatorExtension">
|
||||
<tag name="form.type_extension" />
|
||||
</service>
|
||||
<service id="form.type_extension.submit.validator" class="Symfony\Component\Form\Extension\Validator\Type\SubmitTypeValidatorExtension">
|
||||
<tag name="form.type_extension" extended-type="Symfony\Component\Form\Extension\Core\Type\SubmitType" />
|
||||
</service>
|
||||
<service id="form.type_extension.upload.validator" class="Symfony\Component\Form\Extension\Validator\Type\UploadValidatorExtension">
|
||||
<tag name="form.type_extension" />
|
||||
<argument type="service" id="translator"/>
|
||||
<argument type="string">%validator.translation_domain%</argument>
|
||||
</service>
|
||||
</services>
|
||||
</container>
|
@ -0,0 +1,29 @@
|
||||
<?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\Form\Extension\Csrf\Type\FormTypeCsrfExtension;
|
||||
|
||||
return static function (ContainerConfigurator $container) {
|
||||
$container->services()
|
||||
->set('form.type_extension.csrf', FormTypeCsrfExtension::class)
|
||||
->args([
|
||||
service('security.csrf.token_manager'),
|
||||
param('form.type_extension.csrf.enabled'),
|
||||
param('form.type_extension.csrf.field_name'),
|
||||
service('translator')->nullOnInvalid(),
|
||||
param('validator.translation_domain'),
|
||||
service('form.server_params'),
|
||||
])
|
||||
->tag('form.type_extension')
|
||||
;
|
||||
};
|
@ -1,20 +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="form.type_extension.csrf" class="Symfony\Component\Form\Extension\Csrf\Type\FormTypeCsrfExtension">
|
||||
<tag name="form.type_extension" />
|
||||
<argument type="service" id="security.csrf.token_manager" />
|
||||
<argument>%form.type_extension.csrf.enabled%</argument>
|
||||
<argument>%form.type_extension.csrf.field_name%</argument>
|
||||
<argument type="service" id="translator" on-invalid="null" />
|
||||
<argument>%validator.translation_domain%</argument>
|
||||
<argument type="service" id="form.server_params" />
|
||||
</service>
|
||||
</services>
|
||||
</container>
|
@ -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\Form\Extension\DataCollector\FormDataCollector;
|
||||
use Symfony\Component\Form\Extension\DataCollector\FormDataExtractor;
|
||||
use Symfony\Component\Form\Extension\DataCollector\Proxy\ResolvedTypeFactoryDataCollectorProxy;
|
||||
use Symfony\Component\Form\Extension\DataCollector\Type\DataCollectorTypeExtension;
|
||||
use Symfony\Component\Form\ResolvedFormTypeFactory;
|
||||
|
||||
return static function (ContainerConfigurator $container) {
|
||||
$container->services()
|
||||
->set('form.resolved_type_factory', ResolvedTypeFactoryDataCollectorProxy::class)
|
||||
->args([
|
||||
inline_service(ResolvedFormTypeFactory::class),
|
||||
service('data_collector.form'),
|
||||
])
|
||||
|
||||
->set('form.type_extension.form.data_collector', DataCollectorTypeExtension::class)
|
||||
->args([service('data_collector.form')])
|
||||
->tag('form.type_extension')
|
||||
|
||||
->set('data_collector.form.extractor', FormDataExtractor::class)
|
||||
|
||||
->set('data_collector.form', FormDataCollector::class)
|
||||
->args([service('data_collector.form.extractor')])
|
||||
->tag('data_collector', ['template' => '@WebProfiler/Collector/form.html.twig', 'id' => 'form', 'priority' => 310])
|
||||
;
|
||||
};
|
@ -1,31 +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="form.resolved_type_factory" class="Symfony\Component\Form\Extension\DataCollector\Proxy\ResolvedTypeFactoryDataCollectorProxy">
|
||||
<argument type="service">
|
||||
<service class="Symfony\Component\Form\ResolvedFormTypeFactory" />
|
||||
</argument>
|
||||
<argument type="service" id="data_collector.form" />
|
||||
</service>
|
||||
|
||||
<!-- DataCollectorTypeExtension -->
|
||||
<service id="form.type_extension.form.data_collector" class="Symfony\Component\Form\Extension\DataCollector\Type\DataCollectorTypeExtension">
|
||||
<tag name="form.type_extension" />
|
||||
<argument type="service" id="data_collector.form" />
|
||||
</service>
|
||||
|
||||
<!-- DataCollector -->
|
||||
<service id="data_collector.form.extractor" class="Symfony\Component\Form\Extension\DataCollector\FormDataExtractor" />
|
||||
|
||||
<service id="data_collector.form" class="Symfony\Component\Form\Extension\DataCollector\FormDataCollector">
|
||||
<tag name="data_collector" template="@WebProfiler/Collector/form.html.twig" id="form" priority="310" />
|
||||
<argument type="service" id="data_collector.form.extractor" />
|
||||
</service>
|
||||
</services>
|
||||
</container>
|
@ -77,7 +77,7 @@
|
||||
"symfony/dotenv": "<5.1",
|
||||
"symfony/dom-crawler": "<4.4",
|
||||
"symfony/http-client": "<4.4",
|
||||
"symfony/form": "<4.4",
|
||||
"symfony/form": "<5.2",
|
||||
"symfony/lock": "<4.4",
|
||||
"symfony/mailer": "<5.2",
|
||||
"symfony/messenger": "<4.4",
|
||||
|
@ -52,9 +52,6 @@ class FormPass implements CompilerPassInterface
|
||||
}
|
||||
|
||||
$definition = $container->getDefinition($this->formExtensionService);
|
||||
if (new IteratorArgument([]) != $definition->getArgument(2)) {
|
||||
return;
|
||||
}
|
||||
$definition->replaceArgument(0, $this->processFormTypes($container));
|
||||
$definition->replaceArgument(1, $this->processFormTypeExtensions($container));
|
||||
$definition->replaceArgument(2, $this->processFormTypeGuessers($container));
|
||||
|
Reference in New Issue
Block a user