Browse Source

[FrameworkBundle] implemented asset packages

Kris Wallsmith 14 years ago
parent
commit
6904e0e1e2

+ 18 - 3
src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php

@@ -166,21 +166,36 @@ class Configuration
                     ->beforeNormalization()
                         ->ifTrue(function($v){ return !is_array($v); })
                         ->then(function($v){ return array($v); })
-                        ->end()
+                    ->end()
                     ->prototype('scalar')
                         ->beforeNormalization()
                             ->ifTrue(function($v) { return is_array($v) && isset($v['id']); })
                             ->then(function($v){ return $v['id']; })
                             ->end()
-                        ->end()
                     ->end()
+                ->end()
                 ->fixXmlConfig('loader')
                 ->arrayNode('loaders')
                     ->beforeNormalization()
                         ->ifTrue(function($v){ return !is_array($v); })
                         ->then(function($v){ return array($v); })
-                        ->end()
+                    ->end()
                     ->prototype('scalar')->end()
+                ->end()
+                ->fixXmlConfig('package')
+                ->arrayNode('packages')
+                    ->useAttributeAsKey('name')
+                    ->prototype('array')
+                        ->scalarNode('version')->defaultNull()->end()
+                        ->fixXmlConfig('base_url')
+                        ->arrayNode('base_urls')
+                            ->prototype('scalar')
+                                ->beforeNormalization()
+                                    ->ifTrue(function($v) { return is_array($v) && isset($v['value']); })
+                                    ->then(function($v){ return $v['value']; })
+                                ->end()
+                            ->end()
+                        ->end()
                     ->end()
                 ->end()
         ;

+ 9 - 0
src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php

@@ -312,6 +312,15 @@ class FrameworkExtension extends Extension
             $container->setParameter('templating.assets.base_urls', $config['assets_base_urls']);
         }
 
+        $packages = array();
+        foreach ($config['packages'] as $name => $package) {
+            $packages[$name] = new Definition('Symfony\\Component\\Templating\\Asset\\AssetPackage', array(
+                $package['base_urls'],
+                $package['version'],
+            ));
+        }
+        $container->setParameter('templating.assets.packages', $packages);
+
         if (!empty($config['loaders'])) {
             $loaders = array_map(function($loader) { return new Reference($loader); }, $config['loaders']);
 

+ 10 - 0
src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd

@@ -91,6 +91,7 @@
             <xsd:element name="loader" type="xsd:string" minOccurs="0" maxOccurs="unbounded" />
             <xsd:element name="engine" type="templating_engine" minOccurs="1" maxOccurs="unbounded" />
             <xsd:element name="assets-base-url" type="xsd:string" minOccurs="0" maxOccurs="unbounded" />
+            <xsd:element name="package" type="package" minOccurs="0" maxOccurs="unbounded" />
         </xsd:sequence>
 
         <xsd:attribute name="assets-version" type="xsd:string" />
@@ -102,6 +103,15 @@
         <xsd:attribute name="id" type="xsd:string" />
     </xsd:complexType>
 
+    <xsd:complexType name="package">
+        <xsd:sequence>
+            <xsd:element name="base-url" type="xsd:string" minOccurs="0" maxOccurs="unbounded" />
+        </xsd:sequence>
+
+        <xsd:attribute name="name" type="xsd:string" use="required" />
+        <xsd:attribute name="version" type="xsd:string" />
+    </xsd:complexType>
+
     <xsd:complexType name="translator">
         <xsd:attribute name="enabled" type="xsd:boolean" />
         <xsd:attribute name="fallback" type="xsd:string" />

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

@@ -34,6 +34,7 @@
             <argument type="service" id="request" strict="false" />
             <argument>%templating.assets.base_urls%</argument>
             <argument>%templating.assets.version%</argument>
+            <argument>%templating.assets.packages%</argument>
         </service>
 
         <service id="templating.helper.request" class="%templating.helper.request.class%">

+ 3 - 2
src/Symfony/Bundle/FrameworkBundle/Templating/Helper/AssetsHelper.php

@@ -27,9 +27,10 @@ class AssetsHelper extends BaseAssetsHelper
      * @param Request      $request  A Request instance
      * @param string|array $baseURLs The domain URL or an array of domain URLs
      * @param string       $version  The version
+     * @param array        $packages Asset packages indexed by name
      */
-    public function __construct(Request $request, $baseURLs = array(), $version = null)
+    public function __construct(Request $request, $baseURLs = array(), $version = null, $packages = array())
     {
-        parent::__construct($request->getBasePath(), $baseURLs, $version);
+        parent::__construct($request->getBasePath(), $baseURLs, $version, $packages);
     }
 }

+ 12 - 0
src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/full.php

@@ -35,6 +35,18 @@ $container->loadFromExtension('framework', array(
         'cache_warmer'     => true,
         'engines'          => array('php', 'twig'),
         'loader'           => array('loader.foo', 'loader.bar'),
+        'packages'         => array(
+            'images' => array(
+                'version'   => '1.0.0',
+                'base_urls' => array('http://images1.example.com', 'http://images2.example.com'),
+            ),
+            'foo' => array(
+                'version' => '1.0.0',
+            ),
+            'bar' => array(
+                'base_urls' => array('http://bar1.example.com', 'http://bar2.example.com'),
+            ),
+        ),
     ),
     'translator' => array(
         'enabled'  => true,

+ 9 - 0
src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/full.xml

@@ -18,6 +18,15 @@
             <app:engine id="php" />
             <app:engine id="twig" />
             <app:assets-base-url>http://cdn.example.com</app:assets-base-url>
+            <app:package name="images" version="1.0.0">
+                <app:base-url>http://images1.example.com</app:base-url>
+                <app:base-url>http://images2.example.com</app:base-url>
+            </app:package>
+            <app:package name="foo" version="1.0.0" />
+            <app:package name="bar">
+                <app:base-url>http://bar1.example.com</app:base-url>
+                <app:base-url>http://bar2.example.com</app:base-url>
+            </app:package>
         </app:templating>
         <app:translator enabled="true" fallback="fr" />
         <app:validation enabled="true" />

+ 8 - 0
src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/full.yml

@@ -28,6 +28,14 @@ framework:
         cache_warmer:     true
         engines:          [php, twig]
         loader:           [loader.foo, loader.bar]
+        packages:
+            images:
+                version: 1.0.0
+                base_urls: ["http://images1.example.com", "http://images2.example.com"]
+            foo:
+                version: 1.0.0
+            bar:
+                base_urls: ["http://images1.example.com", "http://images2.example.com"]
     translator:
         enabled:  true
         fallback: fr