Skip to content

Commit 87525bf

Browse files
anvodevTobion
authored andcommitted
[Form] Move configuration to PHP
1 parent c5bbd2b commit 87525bf

File tree

8 files changed

+215
-176
lines changed

8 files changed

+215
-176
lines changed

DependencyInjection/FrameworkExtension.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,7 @@ public function load(array $configs, ContainerBuilder $container)
296296
}
297297

298298
$this->formConfigEnabled = true;
299-
$this->registerFormConfiguration($config, $container, $loader);
299+
$this->registerFormConfiguration($config, $container, $phpLoader);
300300

301301
if (class_exists('Symfony\Component\Validator\Validation')) {
302302
$config['validation']['enabled'] = true;
@@ -505,16 +505,16 @@ public function getConfiguration(array $config, ContainerBuilder $container)
505505
return new Configuration($container->getParameter('kernel.debug'));
506506
}
507507

508-
private function registerFormConfiguration(array $config, ContainerBuilder $container, XmlFileLoader $loader)
508+
private function registerFormConfiguration(array $config, ContainerBuilder $container, PhpFileLoader $loader)
509509
{
510-
$loader->load('form.xml');
510+
$loader->load('form.php');
511511

512512
if (null === $config['form']['csrf_protection']['enabled']) {
513513
$config['form']['csrf_protection']['enabled'] = $config['csrf_protection']['enabled'];
514514
}
515515

516516
if ($this->isConfigEnabled($container, $config['form']['csrf_protection'])) {
517-
$loader->load('form_csrf.xml');
517+
$loader->load('form_csrf.php');
518518

519519
$container->setParameter('form.type_extension.csrf.enabled', true);
520520
$container->setParameter('form.type_extension.csrf.field_name', $config['form']['csrf_protection']['field_name']);
@@ -582,7 +582,7 @@ private function registerProfilerConfiguration(array $config, ContainerBuilder $
582582
$loader->load('cache_debug.xml');
583583

584584
if ($this->formConfigEnabled) {
585-
$loader->load('form_debug.xml');
585+
$phpLoader->load('form_debug.php');
586586
}
587587

588588
if ($this->validatorConfigEnabled) {

Resources/config/form.php

Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <fabien@symfony.com>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
13+
14+
use Symfony\Component\Form\ChoiceList\Factory\CachingFactoryDecorator;
15+
use Symfony\Component\Form\ChoiceList\Factory\DefaultChoiceListFactory;
16+
use Symfony\Component\Form\ChoiceList\Factory\PropertyAccessDecorator;
17+
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
18+
use Symfony\Component\Form\Extension\Core\Type\ColorType;
19+
use Symfony\Component\Form\Extension\Core\Type\FileType;
20+
use Symfony\Component\Form\Extension\Core\Type\FormType;
21+
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
22+
use Symfony\Component\Form\Extension\Core\Type\TransformationFailureExtension;
23+
use Symfony\Component\Form\Extension\DependencyInjection\DependencyInjectionExtension;
24+
use Symfony\Component\Form\Extension\HttpFoundation\HttpFoundationRequestHandler;
25+
use Symfony\Component\Form\Extension\HttpFoundation\Type\FormTypeHttpFoundationExtension;
26+
use Symfony\Component\Form\Extension\Validator\Type\FormTypeValidatorExtension;
27+
use Symfony\Component\Form\Extension\Validator\Type\RepeatedTypeValidatorExtension;
28+
use Symfony\Component\Form\Extension\Validator\Type\SubmitTypeValidatorExtension;
29+
use Symfony\Component\Form\Extension\Validator\Type\UploadValidatorExtension;
30+
use Symfony\Component\Form\Extension\Validator\ValidatorTypeGuesser;
31+
use Symfony\Component\Form\FormFactory;
32+
use Symfony\Component\Form\FormFactoryInterface;
33+
use Symfony\Component\Form\FormRegistry;
34+
use Symfony\Component\Form\FormRegistryInterface;
35+
use Symfony\Component\Form\ResolvedFormTypeFactory;
36+
use Symfony\Component\Form\ResolvedFormTypeFactoryInterface;
37+
use Symfony\Component\Form\Util\ServerParams;
38+
39+
return static function (ContainerConfigurator $container) {
40+
$container->services()
41+
->set('form.resolved_type_factory', ResolvedFormTypeFactory::class)
42+
43+
->alias(ResolvedFormTypeFactoryInterface::class, 'form.resolved_type_factory')
44+
45+
->set('form.registry', FormRegistry::class)
46+
->args([
47+
[
48+
/*
49+
* We don't need to be able to add more extensions.
50+
* more types can be registered with the form.type tag
51+
* more type extensions can be registered with the form.type_extension tag
52+
* more type_guessers can be registered with the form.type_guesser tag
53+
*/
54+
service('form.extension'),
55+
],
56+
service('form.resolved_type_factory'),
57+
])
58+
59+
->alias(FormRegistryInterface::class, 'form.registry')
60+
61+
->set('form.factory', FormFactory::class)
62+
->public()
63+
->args([service('form.registry')])
64+
65+
->alias(FormFactoryInterface::class, 'form.factory')
66+
67+
->set('form.extension', DependencyInjectionExtension::class)
68+
->args([
69+
abstract_arg('All services with tag "form.type" are stored in a service locator by FormPass'),
70+
abstract_arg('All services with tag "form.type_extension" are stored here by FormPass'),
71+
abstract_arg('All services with tag "form.type_guesser" are stored here by FormPass'),
72+
])
73+
74+
->set('form.type_guesser.validator', ValidatorTypeGuesser::class)
75+
->args([service('validator.mapping.class_metadata_factory')])
76+
->tag('form.type_guesser')
77+
78+
->alias('form.property_accessor', 'property_accessor')
79+
80+
->set('form.choice_list_factory.default', DefaultChoiceListFactory::class)
81+
82+
->set('form.choice_list_factory.property_access', PropertyAccessDecorator::class)
83+
->args([
84+
service('form.choice_list_factory.default'),
85+
service('form.property_accessor'),
86+
])
87+
88+
->set('form.choice_list_factory.cached', CachingFactoryDecorator::class)
89+
->args([service('form.choice_list_factory.property_access')])
90+
->tag('kernel.reset', ['method' => 'reset'])
91+
92+
->alias('form.choice_list_factory', 'form.choice_list_factory.cached')
93+
94+
->set('form.type.form', FormType::class)
95+
->args([service('form.property_accessor')])
96+
->tag('form.type')
97+
98+
->set('form.type.choice', ChoiceType::class)
99+
->args([service('form.choice_list_factory')])
100+
->tag('form.type')
101+
102+
->set('form.type.file', FileType::class)
103+
->public()
104+
->args([service('translator')->ignoreOnInvalid()])
105+
->tag('form.type')
106+
107+
->set('form.type.color', ColorType::class)
108+
->args([service('translator')->ignoreOnInvalid()])
109+
->tag('form.type')
110+
111+
->set('form.type_extension.form.transformation_failure_handling', TransformationFailureExtension::class)
112+
->args([service('translator')->ignoreOnInvalid()])
113+
->tag('form.type_extension', ['extended-type' => FormType::class])
114+
115+
->set('form.type_extension.form.http_foundation', FormTypeHttpFoundationExtension::class)
116+
->args([service('form.type_extension.form.request_handler')])
117+
->tag('form.type_extension')
118+
119+
->set('form.type_extension.form.request_handler', HttpFoundationRequestHandler::class)
120+
->args([service('form.server_params')])
121+
122+
->set('form.server_params', ServerParams::class)
123+
->args([service('request_stack')])
124+
125+
->set('form.type_extension.form.validator', FormTypeValidatorExtension::class)
126+
->args([service('validator')])
127+
->tag('form.type_extension', ['extended-type' => FormType::class])
128+
129+
->set('form.type_extension.repeated.validator', RepeatedTypeValidatorExtension::class)
130+
->tag('form.type_extension')
131+
132+
->set('form.type_extension.submit.validator', SubmitTypeValidatorExtension::class)
133+
->tag('form.type_extension', ['extended-type' => SubmitType::class])
134+
135+
->set('form.type_extension.upload.validator', UploadValidatorExtension::class)
136+
->args([
137+
service('translator'),
138+
param('validator.translation_domain'),
139+
])
140+
->tag('form.type_extension')
141+
;
142+
};

Resources/config/form.xml

Lines changed: 0 additions & 119 deletions
Original file line numberDiff line numberDiff line change
@@ -1,119 +0,0 @@
1-
<?xml version="1.0" ?>
2-
3-
<container xmlns="http://symfony.com/schema/dic/services"
4-
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5-
xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd">
6-
7-
<services>
8-
<defaults public="false" />
9-
10-
<!-- ResolvedFormTypeFactory -->
11-
<service id="form.resolved_type_factory" class="Symfony\Component\Form\ResolvedFormTypeFactory" />
12-
<service id="Symfony\Component\Form\ResolvedFormTypeFactoryInterface" alias="form.resolved_type_factory" />
13-
14-
<!-- FormRegistry -->
15-
<service id="form.registry" class="Symfony\Component\Form\FormRegistry">
16-
<argument type="collection">
17-
<!--
18-
We don't need to be able to add more extensions.
19-
* more types can be registered with the form.type tag
20-
* more type extensions can be registered with the form.type_extension tag
21-
* more type_guessers can be registered with the form.type_guesser tag
22-
-->
23-
<argument type="service" id="form.extension" />
24-
</argument>
25-
<argument type="service" id="form.resolved_type_factory" />
26-
</service>
27-
<service id="Symfony\Component\Form\FormRegistryInterface" alias="form.registry" />
28-
29-
<!-- FormFactory -->
30-
<service id="form.factory" class="Symfony\Component\Form\FormFactory" public="true">
31-
<argument type="service" id="form.registry" />
32-
</service>
33-
<service id="Symfony\Component\Form\FormFactoryInterface" alias="form.factory" />
34-
35-
<!-- DependencyInjectionExtension -->
36-
<service id="form.extension" class="Symfony\Component\Form\Extension\DependencyInjection\DependencyInjectionExtension">
37-
<argument /><!-- All services with tag "form.type" are stored in a service locator by FormPass -->
38-
<argument type="collection" /><!-- All services with tag "form.type_extension" are stored here by FormPass -->
39-
<argument type="iterator" /><!-- All services with tag "form.type_guesser" are stored here by FormPass -->
40-
</service>
41-
42-
<!-- ValidatorTypeGuesser -->
43-
<service id="form.type_guesser.validator" class="Symfony\Component\Form\Extension\Validator\ValidatorTypeGuesser">
44-
<tag name="form.type_guesser" />
45-
<argument type="service" id="validator.mapping.class_metadata_factory" />
46-
</service>
47-
48-
<!-- CoreExtension -->
49-
<service id="form.property_accessor" alias="property_accessor" />
50-
51-
<service id="form.choice_list_factory.default" class="Symfony\Component\Form\ChoiceList\Factory\DefaultChoiceListFactory" />
52-
53-
<service id="form.choice_list_factory.property_access" class="Symfony\Component\Form\ChoiceList\Factory\PropertyAccessDecorator">
54-
<argument type="service" id="form.choice_list_factory.default"/>
55-
<argument type="service" id="form.property_accessor"/>
56-
</service>
57-
58-
<service id="form.choice_list_factory.cached" class="Symfony\Component\Form\ChoiceList\Factory\CachingFactoryDecorator">
59-
<argument type="service" id="form.choice_list_factory.property_access"/>
60-
<tag name="kernel.reset" method="reset" />
61-
</service>
62-
63-
<service id="form.choice_list_factory" alias="form.choice_list_factory.cached" />
64-
65-
<service id="form.type.form" class="Symfony\Component\Form\Extension\Core\Type\FormType">
66-
<argument type="service" id="form.property_accessor" />
67-
<tag name="form.type" />
68-
</service>
69-
<service id="form.type.choice" class="Symfony\Component\Form\Extension\Core\Type\ChoiceType">
70-
<tag name="form.type" />
71-
<argument type="service" id="form.choice_list_factory"/>
72-
</service>
73-
<service id="form.type.file" class="Symfony\Component\Form\Extension\Core\Type\FileType" public="true">
74-
<tag name="form.type" />
75-
<argument type="service" id="translator" on-invalid="ignore" />
76-
</service>
77-
<service id="form.type.color" class="Symfony\Component\Form\Extension\Core\Type\ColorType">
78-
<tag name="form.type" />
79-
<argument type="service" id="translator" on-invalid="ignore" />
80-
</service>
81-
82-
<service id="form.type_extension.form.transformation_failure_handling" class="Symfony\Component\Form\Extension\Core\Type\TransformationFailureExtension">
83-
<tag name="form.type_extension" extended-type="Symfony\Component\Form\Extension\Core\Type\FormType" />
84-
<argument type="service" id="translator" on-invalid="ignore" />
85-
</service>
86-
87-
<!-- FormTypeHttpFoundationExtension -->
88-
<service id="form.type_extension.form.http_foundation" class="Symfony\Component\Form\Extension\HttpFoundation\Type\FormTypeHttpFoundationExtension">
89-
<argument type="service" id="form.type_extension.form.request_handler" />
90-
<tag name="form.type_extension" />
91-
</service>
92-
93-
<!-- HttpFoundationRequestHandler -->
94-
<service id="form.type_extension.form.request_handler" class="Symfony\Component\Form\Extension\HttpFoundation\HttpFoundationRequestHandler">
95-
<argument type="service" id="form.server_params" />
96-
</service>
97-
98-
<service id="form.server_params" class="Symfony\Component\Form\Util\ServerParams">
99-
<argument type="service" id="request_stack" />
100-
</service>
101-
102-
<!-- FormTypeValidatorExtension -->
103-
<service id="form.type_extension.form.validator" class="Symfony\Component\Form\Extension\Validator\Type\FormTypeValidatorExtension">
104-
<tag name="form.type_extension" extended-type="Symfony\Component\Form\Extension\Core\Type\FormType" />
105-
<argument type="service" id="validator" />
106-
</service>
107-
<service id="form.type_extension.repeated.validator" class="Symfony\Component\Form\Extension\Validator\Type\RepeatedTypeValidatorExtension">
108-
<tag name="form.type_extension" />
109-
</service>
110-
<service id="form.type_extension.submit.validator" class="Symfony\Component\Form\Extension\Validator\Type\SubmitTypeValidatorExtension">
111-
<tag name="form.type_extension" extended-type="Symfony\Component\Form\Extension\Core\Type\SubmitType" />
112-
</service>
113-
<service id="form.type_extension.upload.validator" class="Symfony\Component\Form\Extension\Validator\Type\UploadValidatorExtension">
114-
<tag name="form.type_extension" />
115-
<argument type="service" id="translator"/>
116-
<argument type="string">%validator.translation_domain%</argument>
117-
</service>
118-
</services>
119-
</container>

Resources/config/form_csrf.php

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <fabien@symfony.com>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
13+
14+
use Symfony\Component\Form\Extension\Csrf\Type\FormTypeCsrfExtension;
15+
16+
return static function (ContainerConfigurator $container) {
17+
$container->services()
18+
->set('form.type_extension.csrf', FormTypeCsrfExtension::class)
19+
->args([
20+
service('security.csrf.token_manager'),
21+
param('form.type_extension.csrf.enabled'),
22+
param('form.type_extension.csrf.field_name'),
23+
service('translator')->nullOnInvalid(),
24+
param('validator.translation_domain'),
25+
service('form.server_params'),
26+
])
27+
->tag('form.type_extension')
28+
;
29+
};

Resources/config/form_csrf.xml

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +0,0 @@
1-
<?xml version="1.0" ?>
2-
3-
<container xmlns="http://symfony.com/schema/dic/services"
4-
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5-
xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd">
6-
7-
<services>
8-
<defaults public="false" />
9-
10-
<service id="form.type_extension.csrf" class="Symfony\Component\Form\Extension\Csrf\Type\FormTypeCsrfExtension">
11-
<tag name="form.type_extension" />
12-
<argument type="service" id="security.csrf.token_manager" />
13-
<argument>%form.type_extension.csrf.enabled%</argument>
14-
<argument>%form.type_extension.csrf.field_name%</argument>
15-
<argument type="service" id="translator" on-invalid="null" />
16-
<argument>%validator.translation_domain%</argument>
17-
<argument type="service" id="form.server_params" />
18-
</service>
19-
</services>
20-
</container>

Resources/config/form_debug.php

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <fabien@symfony.com>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
13+
14+
use Symfony\Component\Form\Extension\DataCollector\FormDataCollector;
15+
use Symfony\Component\Form\Extension\DataCollector\FormDataExtractor;
16+
use Symfony\Component\Form\Extension\DataCollector\Proxy\ResolvedTypeFactoryDataCollectorProxy;
17+
use Symfony\Component\Form\Extension\DataCollector\Type\DataCollectorTypeExtension;
18+
use Symfony\Component\Form\ResolvedFormTypeFactory;
19+
20+
return static function (ContainerConfigurator $container) {
21+
$container->services()
22+
->set('form.resolved_type_factory', ResolvedTypeFactoryDataCollectorProxy::class)
23+
->args([
24+
inline_service(ResolvedFormTypeFactory::class),
25+
service('data_collector.form'),
26+
])
27+
28+
->set('form.type_extension.form.data_collector', DataCollectorTypeExtension::class)
29+
->args([service('data_collector.form')])
30+
->tag('form.type_extension')
31+
32+
->set('data_collector.form.extractor', FormDataExtractor::class)
33+
34+
->set('data_collector.form', FormDataCollector::class)
35+
->args([service('data_collector.form.extractor')])
36+
->tag('data_collector', ['template' => '@WebProfiler/Collector/form.html.twig', 'id' => 'form', 'priority' => 310])
37+
;
38+
};

0 commit comments

Comments
 (0)