Преглед на файлове

[TwigBundle] added a way to easily register extensions from the configuration

    <twig:extension id="twig.extension.debug" />

    twig:
        extensions: [twig.extension.debug]

The Twig-Extensions repository extensions are already registered:

 * twig.extension.debug
 * twig.extension.text
Fabien Potencier преди 14 години
родител
ревизия
2ded40fb75

+ 13 - 0
src/Symfony/Bundle/TwigBundle/DependencyInjection/TwigExtension.php

@@ -59,6 +59,19 @@ class TwigExtension extends Extension
         }
         unset($config['globals'], $config['global']);
 
+        // extensions
+        $extensions = $this->fixConfig($config, 'extension');
+        if (isset($extensions[0]) && is_array($extensions[0])) {
+            foreach ($extensions as $extension) {
+                $container->getDefinition($extension['id'])->addTag('twig.extension');
+            }
+        } else {
+            foreach ($extensions as $id) {
+                $container->getDefinition($id)->addTag('twig.extension');
+            }
+        }
+        unset($config['extensions'], $config['extension']);
+
         // convert - to _
         foreach ($config as $key => $value) {
             $config[str_replace('-', '_', $key)] = $value;

+ 5 - 0
src/Symfony/Bundle/TwigBundle/Resources/config/schema/twig-1.0.xsd

@@ -11,6 +11,7 @@
         <xsd:sequence>
             <xsd:element name="form" type="form" minOccurs="0" maxOccurs="1" />
             <xsd:element name="global" type="global" minOccurs="0" maxOccurs="1" />
+            <xsd:element name="extension" type="extension" minOccurs="0" maxOccurs="unbounded" />
         </xsd:sequence>
 
         <xsd:attribute name="charset" type="xsd:string" />
@@ -32,4 +33,8 @@
         <xsd:attribute name="key" type="xsd:string" />
         <xsd:attribute name="id" type="xsd:string" />
     </xsd:complexType>
+
+    <xsd:complexType name="extension">
+        <xsd:attribute name="id" type="xsd:string" />
+    </xsd:complexType>
 </xsd:schema>

+ 4 - 0
src/Symfony/Bundle/TwigBundle/Resources/config/twig.xml

@@ -53,5 +53,9 @@
             <tag name="twig.extension" />
             <argument type="service" id="security.context" on-invalid="ignore" />
         </service>
+
+        <service id="twig.extension.text" class="Twig_Extensions_Extension_Text" />
+
+        <service id="twig.extension.debug" class="Twig_Extensions_Extension_Debug" />
     </services>
 </container>

+ 19 - 0
src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/TwigExtensionTest.php

@@ -49,4 +49,23 @@ class TwigExtensionTest extends TestCase
         $this->assertEquals('foo', $config[0][1][0]);
         $this->assertEquals('bar', (string) $config[0][1][1]);
     }
+
+    public function testConfigExtensions()
+    {
+        // XML
+        $container = new ContainerBuilder();
+        $container->register('foo', 'stdClass');
+        $loader = new TwigExtension();
+        $loader->configLoad(array('extensions' => array(array('id' => 'foo'))), $container);
+        $config = $container->getDefinition('foo');
+        $this->assertEquals(array('twig.extension'), array_keys($config->getTags()));
+
+        // YAML, PHP
+        $container = new ContainerBuilder();
+        $container->register('foo', 'stdClass');
+        $loader = new TwigExtension();
+        $loader->configLoad(array('extensions' => array('foo')), $container);
+        $config = $container->getDefinition('foo');
+        $this->assertEquals(array('twig.extension'), array_keys($config->getTags()));
+    }
 }