Pārlūkot izejas kodu

[FrameworkBundle] re-introduced parameters in the DIC for better overridability

Fabien Potencier 14 gadi atpakaļ
vecāks
revīzija
f7aea2a830

+ 25 - 49
src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php

@@ -60,14 +60,11 @@ class FrameworkExtension extends Extension
         $config = $processor->processConfiguration($configuration, $configs);
 
         $container->setParameter('kernel.cache_warmup', $config['cache_warmer']);
-
         if (isset($config['charset'])) {
             $container->setParameter('kernel.charset', $config['charset']);
         }
-
         $container->setParameter('kernel.secret', $config['secret']);
-
-        $container->getDefinition('exception_listener')->replaceArgument(0, $config['exception_controller']);
+        $container->setParameter('exception_listener.controller', $config['exception_controller']);
 
         if (!empty($config['test'])) {
             $loader->load('test.xml');
@@ -145,11 +142,8 @@ class FrameworkExtension extends Extension
      */
     private function registerCsrfProtectionConfiguration(array $config, ContainerBuilder $container)
     {
-        $container
-            ->getDefinition('form.type_extension.csrf')
-            ->replaceArgument(0, $config['enabled'])
-            ->replaceArgument(1, $config['field_name'])
-        ;
+        $container->setParameter('form.type_extension.csrf.enabled', $config['enabled']);
+        $container->setParameter('form.type_extension.csrf.field_name', $config['field_name']);
     }
 
     /**
@@ -177,10 +171,8 @@ class FrameworkExtension extends Extension
         $loader->load('profiling.xml');
         $loader->load('collectors.xml');
 
-        $container->getDefinition('profiler_listener')
-            ->replaceArgument(2, $config['only_exceptions'])
-            ->replaceArgument(3, $config['only_master_requests'])
-        ;
+        $container->setParameter('profiler_listener.only_exceptions', $config['only_exceptions']);
+        $container->setParameter('profiler_listener.only_master_requests', $config['only_master_requests']);
 
         // Choose storage class based on the DSN
         $supported = array(
@@ -192,13 +184,12 @@ class FrameworkExtension extends Extension
             throw new \LogicException(sprintf('Driver "%s" is not supported for the profiler.', $class));
         }
 
-        $container->getDefinition('profiler.storage')
-            ->replaceArgument(0, $config['dsn'])
-            ->replaceArgument(1, $config['username'])
-            ->replaceArgument(2, $config['password'])
-            ->replaceArgument(3, $config['lifetime'])
-            ->setClass($supported[$class])
-        ;
+        $container->setParameter('profiler.storage.dsn', $config['dsn']);
+        $container->setParameter('profiler.storage.username', $config['username']);
+        $container->setParameter('profiler.storage.password', $config['password']);
+        $container->setParameter('profiler.storage.lifetime', $config['lifetime']);
+
+        $container->getDefinition('profiler.storage')->setClass($supported[$class]);
 
         if (isset($config['matcher'])) {
             if (isset($config['matcher']['service'])) {
@@ -229,8 +220,8 @@ class FrameworkExtension extends Extension
     {
         $loader->load('routing.xml');
 
+        $container->setParameter('router.resource', $config['resource']);
         $router = $container->findDefinition('router.real');
-        $router->replaceArgument(1, $config['resource']);
 
         if (isset($config['type'])) {
             $argument = $router->getArgument(2);
@@ -243,9 +234,8 @@ class FrameworkExtension extends Extension
             $container->setAlias('router', 'router.cached');
         }
 
-        $def = $container->getDefinition('request_listener');
-        $def->replaceArgument(2, $config['http_port']);
-        $def->replaceArgument(3, $config['https_port']);
+        $container->setParameter('request_listener.http_port', $config['http_port']);
+        $container->setParameter('request_listener.https_port', $config['https_port']);
 
         $this->addClassesToCompile(array(
             'Symfony\\Component\\Routing\\RouterInterface',
@@ -273,7 +263,7 @@ class FrameworkExtension extends Extension
         if (!empty($config['auto_start'])) {
             $session->addMethodCall('start');
         }
-        $session->replaceArgument(1, $config['default_locale']);
+        $container->setParameter('session.default_locale', $config['default_locale']);
 
         // session storage
         $container->setAlias('session.storage', $config['storage_id']);
@@ -315,10 +305,7 @@ class FrameworkExtension extends Extension
             'macvim'   => 'mvim://open?url=file://%f&line=%l',
         );
 
-        $container
-            ->getDefinition('templating.helper.code')
-            ->replaceArgument(0, str_replace('%', '%%', isset($links[$ide]) ? $links[$ide] : $ide))
-        ;
+        $container->setParameter('templating.helper.code.file_link_format', str_replace('%', '%%', isset($links[$ide]) ? $links[$ide] : $ide));
 
         if ($container->getParameter('kernel.debug')) {
             $loader->load('templating_debug.xml');
@@ -331,12 +318,10 @@ class FrameworkExtension extends Extension
                 $package['version'],
             ));
         }
-        $container
-            ->getDefinition('templating.helper.assets')
-            ->replaceArgument(1, isset($config['assets_base_urls']) ? $config['assets_base_urls'] : array())
-            ->replaceArgument(2, $config['assets_version'])
-            ->replaceArgument(3, $packages)
-        ;
+
+        $container->setParameter('templating.helper.assets.assets_base_urls', isset($config['assets_base_urls']) ? $config['assets_base_urls'] : array());
+        $container->setParameter('templating.helper.assets.assets_version', $config['assets_version']);
+        $container->setParameter('templating.helper.assets.packages', $packages);
 
         if (!empty($config['loaders'])) {
             $loaders = array_map(function($loader) { return new Reference($loader); }, $config['loaders']);
@@ -350,11 +335,12 @@ class FrameworkExtension extends Extension
             }
         }
 
+        $container->setParameter('templating.loader.cache.path', null);
         if (isset($config['cache'])) {
             // Wrap the existing loader with cache (must happen after loaders are registered)
             $container->setDefinition('templating.loader.wrapped', $container->findDefinition('templating.loader'));
             $loaderCache = $container->getDefinition('templating.loader.cache');
-            $loaderCache->replaceArgument(1, $config['cache']);
+            $container->setParameter('templating.loader.cache.path', $config['cache']);
 
             $container->setDefinition('templating.loader', $loaderCache);
         }
@@ -459,15 +445,8 @@ class FrameworkExtension extends Extension
 
         $loader->load('validator.xml');
 
-        $container
-            ->getDefinition('validator.mapping.loader.xml_files_loader')
-            ->replaceArgument(0, $this->getValidatorXmlMappingFiles($container))
-        ;
-
-        $container
-            ->getDefinition('validator.mapping.loader.yaml_files_loader')
-            ->replaceArgument(0, $this->getValidatorYamlMappingFiles($container))
-        ;
+        $container->setParameter('validator.mapping.loader.xml_files_loader.mapping_files', $this->getValidatorXmlMappingFiles($container));
+        $container->setParameter('validator.mapping.loader.yaml_files_loader.mapping_files', $this->getValidatorYamlMappingFiles($container));
 
         if (isset($config['annotations'])) {
             $namespaces = array('assert' => 'Symfony\\Component\\Validator\\Constraints\\');
@@ -477,10 +456,7 @@ class FrameworkExtension extends Extension
             }
 
             // Register annotation loader
-            $container
-                ->getDefinition('validator.mapping.loader.annotation_loader')
-                ->replaceArgument(0, $namespaces)
-            ;
+            $container->setParameter('validator.mapping.loader.annotation_loader.namespaces', $namespaces);
 
             $loaderChain = $container->getDefinition('validator.mapping.loader.loader_chain');
             $arguments = $loaderChain->getArguments();

+ 2 - 2
src/Symfony/Bundle/FrameworkBundle/Resources/config/form.xml

@@ -159,8 +159,8 @@
         </service>
         <service id="form.type_extension.csrf" class="Symfony\Component\Form\Extension\Csrf\Type\FormTypeCsrfExtension">
             <tag name="form.type_extension" alias="form" />
-            <argument /> <!-- enabled -->
-            <argument /> <!-- field_name -->
+            <argument>%form.type_extension.csrf.enabled%</argument>
+            <argument>%form.type_extension.csrf.field_name%</argument>
         </service>
     </services>
 </container>

+ 6 - 6
src/Symfony/Bundle/FrameworkBundle/Resources/config/profiling.xml

@@ -17,10 +17,10 @@
         </service>
 
         <service id="profiler.storage" class="" public="false">
-            <argument /> <!-- DSN -->
-            <argument /> <!-- Username -->
-            <argument /> <!-- Password -->
-            <argument /> <!-- Lifetime -->
+            <argument>%profiler.storage.dsn%</argument>
+            <argument>%profiler.storage.username%</argument>
+            <argument>%profiler.storage.password%</argument>
+            <argument>%profiler.storage.lifetime%</argument>
         </service>
 
         <service id="profiler_listener" class="%profiler_listener.class%">
@@ -29,8 +29,8 @@
             <tag name="kernel.listener" event="onCoreRequest" />
             <argument type="service" id="service_container" />
             <argument type="service" id="profiler.request_matcher" on-invalid="null" />
-            <argument /> <!-- Only exceptions? -->
-            <argument /> <!-- Only master requests? -->
+            <argument>%profiler_listener.only_exceptions%</argument>
+            <argument>%profiler_listener.only_master_requests%</argument>
         </service>
     </services>
 </container>

+ 1 - 1
src/Symfony/Bundle/FrameworkBundle/Resources/config/routing.xml

@@ -55,7 +55,7 @@
 
         <service id="router.real" class="%router.class%">
             <argument type="service" id="routing.loader" />
-            <argument /> <!-- routing resource -->
+            <argument>%router.resource%</argument>
             <argument type="collection">
                 <argument key="cache_dir">%kernel.cache_dir%</argument>
                 <argument key="debug">%kernel.debug%</argument>

+ 1 - 1
src/Symfony/Bundle/FrameworkBundle/Resources/config/session.xml

@@ -13,7 +13,7 @@
     <services>
         <service id="session" class="%session.class%">
             <argument type="service" id="session.storage" />
-            <argument /> <!-- default locale -->
+            <argument>%session.default_locale%</argument>
         </service>
 
         <service id="session.storage.native" class="%session.storage.native.class%" public="false">

+ 2 - 2
src/Symfony/Bundle/FrameworkBundle/Resources/config/templating.xml

@@ -19,7 +19,7 @@
     <services>
         <service id="templating.engine.delegating" class="%templating.engine.delegating.class%" public="false">
             <argument type="service" id="service_container" />
-            <argument type="collection" />
+            <argument /> <!-- engines -->
         </service>
 
         <service id="templating.name_parser" class="%templating.name_parser.class%">
@@ -52,7 +52,7 @@
 
         <service id="templating.loader.cache" class="%templating.loader.cache.class%" public="false">
             <argument type="service" id="templating.loader.wrapped" />
-            <argument /> <!-- cache path -->
+            <argument>%templating.loader.cache.path%</argument>
             <call method="setDebugger"><argument type="service" id="templating.debugger" on-invalid="ignore" /></call>
         </service>
 

+ 4 - 4
src/Symfony/Bundle/FrameworkBundle/Resources/config/templating_php.xml

@@ -35,9 +35,9 @@
         <service id="templating.helper.assets" class="%templating.helper.assets.class%">
             <tag name="templating.helper" alias="assets" />
             <argument type="service" id="request" strict="false" />
-            <argument type="collection" /> <!-- assets base URLs -->
-            <argument /> <!-- assets version -->
-            <argument type="collection" /> <!-- packages -->
+            <argument>%templating.helper.assets.assets_base_urls%</argument>
+            <argument>%templating.helper.assets.assets_version%</argument>
+            <argument>%templating.helper.assets.packages%</argument>
         </service>
 
         <service id="templating.helper.request" class="%templating.helper.request.class%">
@@ -62,7 +62,7 @@
 
         <service id="templating.helper.code" class="%templating.helper.code.class%">
             <tag name="templating.helper" alias="code" />
-            <argument /> <!-- file link format -->
+            <argument>%templating.helper.code.file_link_format%</argument>
             <argument>%kernel.root_dir%</argument>
         </service>
 

+ 3 - 3
src/Symfony/Bundle/FrameworkBundle/Resources/config/validator.xml

@@ -48,15 +48,15 @@
         <service id="validator.mapping.loader.static_method_loader" class="%validator.mapping.loader.static_method_loader.class%" public="false" />
 
         <service id="validator.mapping.loader.annotation_loader" class="%validator.mapping.loader.annotation_loader.class%" public="false">
-            <argument /> <!-- namespaces -->
+            <argument type="collection">%validator.mapping.loader.annotation_loader.namespaces%</argument>
         </service>
 
         <service id="validator.mapping.loader.xml_files_loader" class="%validator.mapping.loader.xml_files_loader.class%" public="false">
-            <argument /> <!-- mapping files -->
+            <argument type="collection">%validator.mapping.loader.xml_files_loader.mapping_files%</argument>
         </service>
 
         <service id="validator.mapping.loader.yaml_files_loader" class="%validator.mapping.loader.yaml_files_loader.class%" public="false">
-            <argument /> <!-- mapping files -->
+            <argument type="collection">%validator.mapping.loader.yaml_files_loader.mapping_files%</argument>
         </service>
     </services>
 </container>

+ 3 - 3
src/Symfony/Bundle/FrameworkBundle/Resources/config/web.xml

@@ -31,8 +31,8 @@
             <tag name="monolog.logger" channel="request" />
             <argument type="service" id="service_container" />
             <argument type="service" id="router" />
-            <argument /> <!-- HTTP port -->
-            <argument /> <!-- HTTPS port -->
+            <argument>%request_listener.http_port%</argument>
+            <argument>%request_listener.https_port%</argument>
             <argument type="service" id="logger" on-invalid="ignore" />
         </service>
 
@@ -44,7 +44,7 @@
         <service id="exception_listener" class="%exception_listener.class%">
             <tag name="kernel.listener" event="onCoreException" priority="-128" />
             <tag name="monolog.logger" channel="request" />
-            <argument /> <!-- controller name -->
+            <argument>%exception_listener.controller%</argument>
             <argument type="service" id="logger" on-invalid="null" />
         </service>
     </services>

+ 20 - 13
src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php

@@ -26,8 +26,10 @@ abstract class FrameworkExtensionTest extends TestCase
 
         $def = $container->getDefinition('form.type_extension.csrf');
 
-        $this->assertTrue($def->getArgument(0));
-        $this->assertEquals('_csrf', $def->getArgument(1));
+        $this->assertTrue($container->getParameter('form.type_extension.csrf.enabled'));
+        $this->assertEquals('%form.type_extension.csrf.enabled%', $def->getArgument(0));
+        $this->assertEquals('_csrf', $container->getParameter('form.type_extension.csrf.field_name'));
+        $this->assertEquals('%form.type_extension.csrf.field_name%', $def->getArgument(1));
         $this->assertEquals('s3cr3t', $container->getParameterBag()->resolveValue($container->findDefinition('form.csrf_provider')->getArgument(1)));
     }
 
@@ -44,7 +46,8 @@ abstract class FrameworkExtensionTest extends TestCase
 
         $this->assertTrue($container->hasDefinition('profiler'), '->registerProfilerConfiguration() loads profiling.xml');
         $this->assertTrue($container->hasDefinition('data_collector.config'), '->registerProfilerConfiguration() loads collectors.xml');
-        $this->assertTrue($container->getDefinition('profiler_listener')->getArgument(2));
+        $this->assertTrue($container->getParameter('profiler_listener.only_exceptions'));
+        $this->assertEquals('%profiler_listener.only_exceptions%', $container->getDefinition('profiler_listener')->getArgument(2));
     }
 
     public function testRouter()
@@ -53,7 +56,8 @@ abstract class FrameworkExtensionTest extends TestCase
 
         $this->assertTrue($container->hasDefinition('router.real'), '->registerRouterConfiguration() loads routing.xml');
         $arguments = $container->getDefinition('router.real')->getArguments();
-        $this->assertEquals($container->getParameter('kernel.root_dir').'/config/routing.xml', $arguments[1], '->registerRouterConfiguration() sets routing resource');
+        $this->assertEquals($container->getParameter('kernel.root_dir').'/config/routing.xml', $container->getParameter('router.resource'), '->registerRouterConfiguration() sets routing resource');
+        $this->assertEquals('%router.resource%', $arguments[1], '->registerRouterConfiguration() sets routing resource');
         $this->assertEquals('xml', $arguments[2]['resource_type'], '->registerRouterConfiguration() sets routing resource type');
         $this->assertTrue($container->getDefinition('router.cache_warmer')->hasTag('kernel.cache_warmer'), '->registerRouterConfiguration() tags router cache warmer if cache warming is set');
         $this->assertEquals('router.cached', (string) $container->getAlias('router'), '->registerRouterConfiguration() changes router alias to cached if cache warming is set');
@@ -74,7 +78,8 @@ abstract class FrameworkExtensionTest extends TestCase
         $container = $this->createContainerFromFile('full');
 
         $this->assertTrue($container->hasDefinition('session'), '->registerSessionConfiguration() loads session.xml');
-        $this->assertEquals('fr', $container->getDefinition('session')->getArgument(1));
+        $this->assertEquals('fr', $container->getParameter('session.default_locale'));
+        $this->assertEquals('%session.default_locale%', $container->getDefinition('session')->getArgument(1));
         $this->assertTrue($container->getDefinition('session')->hasMethodCall('start'));
         $this->assertEquals('session.storage.native', (string) $container->getAlias('session.storage'));
 
@@ -93,8 +98,10 @@ abstract class FrameworkExtensionTest extends TestCase
 
         $this->assertTrue($container->hasDefinition('templating.name_parser'), '->registerTemplatingConfiguration() loads templating.xml');
         $arguments = $container->getDefinition('templating.helper.assets')->getArguments();
-        $this->assertEquals('SomeVersionScheme', $arguments[2]);
-        $this->assertEquals(array('http://cdn.example.com'), $arguments[1]);
+        $this->assertEquals('%templating.helper.assets.assets_version%', $arguments[2]);
+        $this->assertEquals('SomeVersionScheme', $container->getParameter('templating.helper.assets.assets_version'));
+        $this->assertEquals('%templating.helper.assets.assets_base_urls%', $arguments[1]);
+        $this->assertEquals(array('http://cdn.example.com'), $container->getParameter('templating.helper.assets.assets_base_urls'));
 
         $this->assertTrue($container->getDefinition('templating.cache_warmer.template_paths')->hasTag('kernel.cache_warmer'), '->registerTemplatingConfiguration() tags templating cache warmer if cache warming is set');
         $this->assertEquals('templating.locator.cached', (string) $container->getAlias('templating.locator'), '->registerTemplatingConfiguration() changes templating.locator alias to cached if cache warming is set');
@@ -105,7 +112,8 @@ abstract class FrameworkExtensionTest extends TestCase
 
         $this->assertEquals($container->getDefinition('templating.loader'), $container->getDefinition('templating.loader.cache'), '->registerTemplatingConfiguration() configures the loader to use cache');
 
-        $this->assertEquals('/path/to/cache', $container->getDefinition('templating.loader.cache')->getArgument(1));
+        $this->assertEquals('%templating.loader.cache.path%', $container->getDefinition('templating.loader.cache')->getArgument(1));
+        $this->assertEquals('/path/to/cache', $container->getParameter('templating.loader.cache.path'));
 
         $this->assertEquals(array('php', 'twig'), $container->getParameter('templating.engines'), '->registerTemplatingConfiguration() sets a templating.engines parameter');
     }
@@ -152,8 +160,7 @@ abstract class FrameworkExtensionTest extends TestCase
         $this->assertTrue($container->hasDefinition('validator.mapping.loader.xml_files_loader'), '->registerValidationConfiguration() defines the XML loader');
         $this->assertTrue($container->hasDefinition('validator.mapping.loader.yaml_files_loader'), '->registerValidationConfiguration() defines the YAML loader');
 
-        $xmlFiles = $container->getDefinition('validator.mapping.loader.xml_files_loader')->getArgument(0);
-
+        $xmlFiles = $container->getParameter('validator.mapping.loader.xml_files_loader.mapping_files');
         $this->assertContains(
             realpath(__DIR__.'/../../../../Component/Form/Resources/config/validation.xml'),
             array_map('realpath', $xmlFiles),
@@ -167,7 +174,7 @@ abstract class FrameworkExtensionTest extends TestCase
 
         $this->assertTrue($container->hasDefinition('validator.mapping.loader.annotation_loader'), '->registerValidationConfiguration() defines the annotation loader');
 
-        $argument = $container->getDefinition('validator.mapping.loader.annotation_loader')->getArgument(0);
+        $argument = $container->getParameter('validator.mapping.loader.annotation_loader.namespaces');
         $this->assertEquals('Symfony\\Component\\Validator\\Constraints\\', $argument['assert'], '->registerValidationConfiguration() loads the default "assert" prefix');
         $this->assertEquals('Application\\Validator\\Constraints\\', $argument['app'], '->registerValidationConfiguration() loads custom validation namespaces');
     }
@@ -180,11 +187,11 @@ abstract class FrameworkExtensionTest extends TestCase
             'kernel.bundles' => array('TestBundle' => 'Symfony\Bundle\FrameworkBundle\Tests\TestBundle'),
         ));
 
-        $yamlArgs = $container->getDefinition('validator.mapping.loader.yaml_files_loader')->getArgument(0);
+        $yamlArgs = $container->getParameter('validator.mapping.loader.yaml_files_loader.mapping_files');
         $this->assertEquals(1, count($yamlArgs));
         $this->assertStringEndsWith('TestBundle'.DIRECTORY_SEPARATOR.'Resources'.DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'validation.yml', $yamlArgs[0]);
 
-        $xmlArgs = $container->getDefinition('validator.mapping.loader.xml_files_loader')->getArgument(0);
+        $xmlArgs = $container->getParameter('validator.mapping.loader.xml_files_loader.mapping_files');
         $this->assertEquals(2, count($xmlArgs));
         $this->assertStringEndsWith('Component/Form/Resources/config/validation.xml', $xmlArgs[0]);
         $this->assertStringEndsWith('TestBundle'.DIRECTORY_SEPARATOR.'Resources'.DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'validation.xml', $xmlArgs[1]);