Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 2ba70a8

Browse filesBrowse files
committed
[FrameworkBundle][Form] Move FormPass to the Form component
1 parent dad0c2f commit 2ba70a8
Copy full SHA for 2ba70a8

File tree

11 files changed

+352
-71
lines changed
Filter options

11 files changed

+352
-71
lines changed

‎UPGRADE-3.3.md

Copy file name to clipboardExpand all lines: UPGRADE-3.3.md
+4Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@ FrameworkBundle
3535

3636
* The `Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\AddConsoleCommandPass` has been deprecated. Use `Symfony\Component\Console\DependencyInjection\AddConsoleCommandPass` instead.
3737

38+
* The `Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\FormPass` class has been
39+
deprecated and will be removed in 4.0. Use the `Symfony\Component\Form\DependencyInjection\FormPass`
40+
class instead.
41+
3842
HttpKernel
3943
-----------
4044

‎UPGRADE-4.0.md

Copy file name to clipboardExpand all lines: UPGRADE-4.0.md
+3Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,9 @@ FrameworkBundle
156156

157157
* The `Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\AddConsoleCommandPass` has been removed. Use `Symfony\Component\Console\DependencyInjection\AddConsoleCommandPass` instead.
158158

159+
* The `Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\FormPass` class has been
160+
removed. Use the `Symfony\Component\Form\DependencyInjection\FormPass` class instead.
161+
159162
SecurityBundle
160163
--------------
161164

‎src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ CHANGELOG
1212
is disabled.
1313
* Added `GlobalVariables::getToken()`
1414
* Deprecated `Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\AddConsoleCommandPass`. Use `Symfony\Component\Console\DependencyInjection\AddConsoleCommandPass` instead.
15-
* Added configurable paths for validation files
15+
* Deprecated `FormPass`, use `Symfony\Component\Form\DependencyInjection\FormPass` instead.
1616

1717
3.2.0
1818
-----

‎src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/FormPass.php

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/FormPass.php
+6-62Lines changed: 6 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -11,74 +11,18 @@
1111

1212
namespace Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler;
1313

14-
use Symfony\Component\DependencyInjection\Compiler\PriorityTaggedServiceTrait;
15-
use Symfony\Component\DependencyInjection\ContainerBuilder;
16-
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
17-
use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException;
14+
@trigger_error(sprintf('The %s class is deprecated since version 3.3 and will be removed in 4.0. Use Symfony\Component\Form\DependencyInjection\FormPass instead.', FormPass::class), E_USER_DEPRECATED);
15+
16+
use Symfony\Component\Form\DependencyInjection\FormPass as BaseFormPass;
1817

1918
/**
2019
* Adds all services with the tags "form.type" and "form.type_guesser" as
2120
* arguments of the "form.extension" service.
2221
*
22+
* @deprecated since version 3.3, to be removed in 4.0. Use {@link BaseFormPass} instead.
23+
*
2324
* @author Bernhard Schussek <bschussek@gmail.com>
2425
*/
25-
class FormPass implements CompilerPassInterface
26+
class FormPass extends BaseFormPass
2627
{
27-
use PriorityTaggedServiceTrait;
28-
29-
public function process(ContainerBuilder $container)
30-
{
31-
if (!$container->hasDefinition('form.extension')) {
32-
return;
33-
}
34-
35-
$definition = $container->getDefinition('form.extension');
36-
37-
// Builds an array with fully-qualified type class names as keys and service IDs as values
38-
$types = array();
39-
40-
foreach ($container->findTaggedServiceIds('form.type') as $serviceId => $tag) {
41-
$serviceDefinition = $container->getDefinition($serviceId);
42-
if (!$serviceDefinition->isPublic()) {
43-
throw new InvalidArgumentException(sprintf('The service "%s" must be public as form types are lazy-loaded.', $serviceId));
44-
}
45-
46-
// Support type access by FQCN
47-
$types[$serviceDefinition->getClass()] = $serviceId;
48-
}
49-
50-
$definition->replaceArgument(1, $types);
51-
52-
$typeExtensions = array();
53-
54-
foreach ($this->findAndSortTaggedServices('form.type_extension', $container) as $reference) {
55-
$serviceId = (string) $reference;
56-
$serviceDefinition = $container->getDefinition($serviceId);
57-
if (!$serviceDefinition->isPublic()) {
58-
throw new InvalidArgumentException(sprintf('The service "%s" must be public as form type extensions are lazy-loaded.', $serviceId));
59-
}
60-
61-
$tag = $serviceDefinition->getTag('form.type_extension');
62-
if (isset($tag[0]['extended_type'])) {
63-
$extendedType = $tag[0]['extended_type'];
64-
} else {
65-
throw new InvalidArgumentException(sprintf('Tagged form type extension must have the extended type configured using the extended_type/extended-type attribute, none was configured for the "%s" service.', $serviceId));
66-
}
67-
68-
$typeExtensions[$extendedType][] = $serviceId;
69-
}
70-
71-
$definition->replaceArgument(2, $typeExtensions);
72-
73-
// Find all services annotated with "form.type_guesser"
74-
$guessers = array_keys($container->findTaggedServiceIds('form.type_guesser'));
75-
foreach ($guessers as $serviceId) {
76-
$serviceDefinition = $container->getDefinition($serviceId);
77-
if (!$serviceDefinition->isPublic()) {
78-
throw new InvalidArgumentException(sprintf('The service "%s" must be public as form type guessers are lazy-loaded.', $serviceId));
79-
}
80-
}
81-
82-
$definition->replaceArgument(3, $guessers);
83-
}
8428
}

‎src/Symfony/Bundle/FrameworkBundle/FrameworkBundle.php

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/FrameworkBundle.php
+13-5Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\CachePoolPass;
1919
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\CachePoolClearerPass;
2020
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\ControllerArgumentValueResolverPass;
21-
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\FormPass;
2221
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\PropertyInfoPass;
2322
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\TemplatingPass;
2423
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\RoutingResolverPass;
@@ -42,8 +41,10 @@
4241
use Symfony\Component\DependencyInjection\Compiler\PassConfig;
4342
use Symfony\Component\EventDispatcher\DependencyInjection\RegisterListenersPass;
4443
use Symfony\Component\HttpKernel\DependencyInjection\FragmentRendererPass;
44+
use Symfony\Component\Form\DependencyInjection\FormPass;
4545
use Symfony\Component\HttpFoundation\Request;
4646
use Symfony\Component\HttpKernel\Bundle\Bundle;
47+
use Symfony\Component\Config\Resource\ClassExistenceResource;
4748

4849
/**
4950
* Bundle.
@@ -81,10 +82,6 @@ public function build(ContainerBuilder $container)
8182
$container->addCompilerPass(new TemplatingPass());
8283
$container->addCompilerPass(new AddConstraintValidatorsPass(), PassConfig::TYPE_BEFORE_REMOVING);
8384
$container->addCompilerPass(new AddValidatorInitializersPass());
84-
if (class_exists(AddConsoleCommandPass::class)) {
85-
$container->addCompilerPass(new AddConsoleCommandPass());
86-
}
87-
$container->addCompilerPass(new FormPass());
8885
$container->addCompilerPass(new TranslatorPass());
8986
$container->addCompilerPass(new LoggingTranslatorPass());
9087
$container->addCompilerPass(new AddCacheWarmerPass());
@@ -99,6 +96,8 @@ public function build(ContainerBuilder $container)
9996
$container->addCompilerPass(new CachePoolPass(), PassConfig::TYPE_BEFORE_OPTIMIZATION, 32);
10097
$container->addCompilerPass(new ValidateWorkflowsPass());
10198
$container->addCompilerPass(new CachePoolClearerPass(), PassConfig::TYPE_AFTER_REMOVING);
99+
$this->addCompilerPassIfExists($container, AddConsoleCommandPass::class);
100+
$this->addCompilerPassIfExists($container, FormPass::class);
102101

103102
if ($container->getParameter('kernel.debug')) {
104103
$container->addCompilerPass(new AddDebugLogProcessorPass(), PassConfig::TYPE_BEFORE_OPTIMIZATION, -32);
@@ -109,4 +108,13 @@ public function build(ContainerBuilder $container)
109108
$container->addCompilerPass(new CacheCollectorPass());
110109
}
111110
}
111+
112+
private function addCompilerPassIfExists(ContainerBuilder $container, $class, $type = PassConfig::TYPE_BEFORE_OPTIMIZATION, $priority = 0)
113+
{
114+
$container->addResource(ClassExistenceResource($class));
115+
116+
if (class_exists($class)) {
117+
$container->addCompilerPass(new $class(), $type, $priority);
118+
}
119+
}
112120
}

‎src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Compiler/FormPassTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Compiler/FormPassTest.php
+2Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
use Symfony\Component\Form\AbstractType;
1919

2020
/**
21+
* @group legacy
22+
*
2123
* @author Bernhard Schussek <bschussek@gmail.com>
2224
*/
2325
class FormPassTest extends \PHPUnit_Framework_TestCase

‎src/Symfony/Bundle/FrameworkBundle/composer.json

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/composer.json
+3-2Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
"symfony/dom-crawler": "~2.8|~3.0",
4040
"symfony/polyfill-intl-icu": "~1.0",
4141
"symfony/security": "~2.8|~3.0",
42-
"symfony/form": "~2.8.16|~3.1.9|^3.2.2",
42+
"symfony/form": "~3.3",
4343
"symfony/expression-language": "~2.8|~3.0",
4444
"symfony/process": "~2.8|~3.0",
4545
"symfony/security-core": "~3.2",
@@ -57,7 +57,8 @@
5757
"conflict": {
5858
"phpdocumentor/reflection-docblock": "<3.0",
5959
"phpdocumentor/type-resolver": "<0.2.0",
60-
"symfony/console": "<3.3"
60+
"symfony/console": "<3.3",
61+
"symfony/form": "<3.3"
6162
},
6263
"suggest": {
6364
"ext-apcu": "For best performance of the system caches",

‎src/Symfony/Component/Form/CHANGELOG.md

Copy file name to clipboardExpand all lines: src/Symfony/Component/Form/CHANGELOG.md
+5Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
CHANGELOG
22
=========
33

4+
3.3.0
5+
-----
6+
7+
* added `FormPass`
8+
49
3.2.0
510
-----
611

+95Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
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\Form\DependencyInjection;
13+
14+
use Symfony\Component\DependencyInjection\Compiler\PriorityTaggedServiceTrait;
15+
use Symfony\Component\DependencyInjection\ContainerBuilder;
16+
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
17+
use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException;
18+
19+
/**
20+
* Adds all services with the tags "form.type" and "form.type_guesser" as
21+
* arguments of the "form.extension" service.
22+
*
23+
* @author Bernhard Schussek <bschussek@gmail.com>
24+
*/
25+
class FormPass implements CompilerPassInterface
26+
{
27+
use PriorityTaggedServiceTrait;
28+
29+
private $formExtensionService;
30+
private $formTypeTag;
31+
private $formTypeExtensionTag;
32+
private $formTypeGuesserTag;
33+
34+
public function __construct($formExtensionService = 'form.extension', $formTypeTag = 'form.type', $formTypeExtensionTag = 'form.type_extension', $formTypeGuesserTag = 'form.type_guesser')
35+
{
36+
$this->formExtensionService = $formExtensionService;
37+
$this->formTypeTag = $formTypeTag;
38+
$this->formTypeExtensionTag = $formTypeExtensionTag;
39+
$this->formTypeGuesserTag = $formTypeGuesserTag;
40+
}
41+
42+
public function process(ContainerBuilder $container)
43+
{
44+
if (!$container->hasDefinition($this->formExtensionService)) {
45+
return;
46+
}
47+
48+
$definition = $container->getDefinition($this->formExtensionService);
49+
50+
// Builds an array with fully-qualified type class names as keys and service IDs as values
51+
$types = array();
52+
foreach ($container->findTaggedServiceIds($this->formTypeTag) as $serviceId => $tag) {
53+
$serviceDefinition = $container->getDefinition($serviceId);
54+
if (!$serviceDefinition->isPublic()) {
55+
throw new InvalidArgumentException(sprintf('The service "%s" must be public as form types are lazy-loaded.', $serviceId));
56+
}
57+
58+
// Support type access by FQCN
59+
$types[$serviceDefinition->getClass()] = $serviceId;
60+
}
61+
62+
$definition->replaceArgument(1, $types);
63+
64+
$typeExtensions = array();
65+
66+
foreach ($this->findAndSortTaggedServices($this->formTypeExtensionTag, $container) as $reference) {
67+
$serviceId = (string) $reference;
68+
$serviceDefinition = $container->getDefinition($serviceId);
69+
if (!$serviceDefinition->isPublic()) {
70+
throw new InvalidArgumentException(sprintf('The service "%s" must be public as form type extensions are lazy-loaded.', $serviceId));
71+
}
72+
73+
$tag = $serviceDefinition->getTag($this->formTypeExtensionTag);
74+
if (isset($tag[0]['extended_type'])) {
75+
$extendedType = $tag[0]['extended_type'];
76+
} else {
77+
throw new InvalidArgumentException(sprintf('"%s" tagged services must have the extended type configured using the extended_type/extended-type attribute, none was configured for the "%s" service.', $this->formTypeExtensionTag, $serviceId));
78+
}
79+
80+
$typeExtensions[$extendedType][] = $serviceId;
81+
}
82+
83+
$definition->replaceArgument(2, $typeExtensions);
84+
85+
$guessers = array_keys($container->findTaggedServiceIds($this->formTypeGuesserTag));
86+
foreach ($guessers as $serviceId) {
87+
$serviceDefinition = $container->getDefinition($serviceId);
88+
if (!$serviceDefinition->isPublic()) {
89+
throw new InvalidArgumentException(sprintf('The service "%s" must be public as form type guessers are lazy-loaded.', $serviceId));
90+
}
91+
}
92+
93+
$definition->replaceArgument(3, $guessers);
94+
}
95+
}

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.