Skip to content

Commit 08cca4c

Browse files
committed
[FrameworkBundle][Form] Move FormPass to the Form component
1 parent 9b84732 commit 08cca4c

File tree

5 files changed

+25
-70
lines changed

5 files changed

+25
-70
lines changed

CHANGELOG.md

Lines 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
-----

DependencyInjection/Compiler/FormPass.php

Lines 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
}

FrameworkBundle.php

Lines 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(new ClassExistenceResource($class));
115+
116+
if (class_exists($class)) {
117+
$container->addCompilerPass(new $class(), $type, $priority);
118+
}
119+
}
112120
}

Tests/DependencyInjection/Compiler/FormPassTest.php

Lines 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

composer.json

Lines 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",

0 commit comments

Comments
 (0)