@@ -101,6 +101,10 @@ public function load(array $configs, ContainerBuilder $container)
101
101
102
102
$ this ->registerSecurityCsrfConfiguration ($ config ['csrf_protection ' ], $ container , $ loader );
103
103
104
+ if (isset ($ config ['assets ' ])) {
105
+ $ this ->registerAssetsConfiguration ($ config ['assets ' ], $ container , $ loader );
106
+ }
107
+
104
108
if (isset ($ config ['templating ' ])) {
105
109
$ this ->registerTemplatingConfiguration ($ config ['templating ' ], $ config ['ide ' ], $ container , $ loader );
106
110
}
@@ -488,11 +492,11 @@ private function registerTemplatingConfiguration(array $config, $ide, ContainerB
488
492
}
489
493
490
494
// create package definitions and add them to the assets helper
491
- $ defaultPackage = $ this ->createPackageDefinition ($ container , $ config ['assets_base_urls ' ]['http ' ], $ config ['assets_base_urls ' ]['ssl ' ], $ config ['assets_version ' ], $ config ['assets_version_format ' ]);
495
+ $ defaultPackage = $ this ->createTemplatingPackageDefinition ($ container , $ config ['assets_base_urls ' ]['http ' ], $ config ['assets_base_urls ' ]['ssl ' ], $ config ['assets_version ' ], $ config ['assets_version_format ' ]);
492
496
$ container ->setDefinition ('templating.asset.default_package ' , $ defaultPackage );
493
497
$ namedPackages = array ();
494
498
foreach ($ config ['packages ' ] as $ name => $ package ) {
495
- $ namedPackage = $ this ->createPackageDefinition ($ container , $ package ['base_urls ' ]['http ' ], $ package ['base_urls ' ]['ssl ' ], $ package ['version ' ], $ package ['version_format ' ], $ name );
499
+ $ namedPackage = $ this ->createTemplatingPackageDefinition ($ container , $ package ['base_urls ' ]['http ' ], $ package ['base_urls ' ]['ssl ' ], $ package ['version ' ], $ package ['version_format ' ], $ name );
496
500
$ container ->setDefinition ('templating.asset.package. ' .$ name , $ namedPackage );
497
501
$ namedPackages [$ name ] = new Reference ('templating.asset.package. ' .$ name );
498
502
}
@@ -555,7 +559,7 @@ private function registerTemplatingConfiguration(array $config, $ide, ContainerB
555
559
/**
556
560
* Returns a definition for an asset package.
557
561
*/
558
- private function createPackageDefinition (ContainerBuilder $ container , array $ httpUrls , array $ sslUrls , $ version , $ format , $ name = null )
562
+ private function createTemplatingPackageDefinition (ContainerBuilder $ container , array $ httpUrls , array $ sslUrls , $ version , $ format , $ name = null )
559
563
{
560
564
if (!$ httpUrls ) {
561
565
$ package = new DefinitionDecorator ('templating.asset.path_package ' );
@@ -619,6 +623,85 @@ private function createPackageDefinition(ContainerBuilder $container, array $htt
619
623
return $ package ;
620
624
}
621
625
626
+ /**
627
+ * Loads the assets configuration.
628
+ *
629
+ * @param array $config A assets configuration array
630
+ * @param ContainerBuilder $container A ContainerBuilder instance
631
+ * @param XmlFileLoader $loader An XmlFileLoader instance
632
+ */
633
+ private function registerAssetsConfiguration (array $ config , ContainerBuilder $ container , XmlFileLoader $ loader )
634
+ {
635
+ $ loader ->load ('assets.xml ' );
636
+
637
+ $ defaultVersion = $ this ->createVersion ($ container , $ config ['version ' ], $ config ['version_format ' ]);
638
+
639
+ $ defaultPackage = $ this ->createPackageDefinition ($ config ['base_path ' ], $ config ['base_urls ' ], $ defaultVersion );
640
+ $ container ->setDefinition ('assets._default_package ' , $ defaultPackage );
641
+
642
+ $ namedPackages = array ();
643
+ foreach ($ config ['packages ' ] as $ name => $ package ) {
644
+ if (null === $ package ['version ' ]) {
645
+ $ version = $ defaultVersion ;
646
+ } else {
647
+ $ format = $ package ['version_format ' ] ?: $ config ['version_format ' ];
648
+
649
+ $ version = $ this ->createVersion ($ container , $ package ['version ' ], $ format , $ name );
650
+ }
651
+
652
+ $ container ->setDefinition ('assets._package_ ' .$ name , $ this ->createPackageDefinition ($ package ['base_path ' ], $ package ['base_urls ' ], $ version ));
653
+ $ namedPackages [$ name ] = new Reference ('assets._package_ ' .$ name );
654
+ }
655
+
656
+ $ container ->getDefinition ('assets.packages ' )
657
+ ->replaceArgument (0 , new Reference ('assets._default_package ' ))
658
+ ->replaceArgument (1 , $ namedPackages )
659
+ ;
660
+ }
661
+
662
+ /**
663
+ * Returns a definition for an asset package.
664
+ */
665
+ private function createPackageDefinition ($ basePath , array $ baseUrls , Reference $ version )
666
+ {
667
+ if ($ basePath && $ baseUrls ) {
668
+ throw new \LogicException ('An asset package cannot have base URLs and base paths. ' );
669
+ }
670
+
671
+ if (!$ baseUrls ) {
672
+ $ package = new DefinitionDecorator ('assets.path_package ' );
673
+
674
+ return $ package
675
+ ->setPublic (false )
676
+ ->replaceArgument (0 , $ basePath )
677
+ ->replaceArgument (1 , $ version )
678
+ ;
679
+ }
680
+
681
+ $ package = new DefinitionDecorator ('assets.url_package ' );
682
+ return $ package
683
+ ->setPublic (false )
684
+ ->replaceArgument (0 , $ baseUrls )
685
+ ->replaceArgument (1 , $ version )
686
+ ;
687
+ }
688
+
689
+ private function createVersion (ContainerBuilder $ container , $ version , $ format , $ name = null )
690
+ {
691
+ if (!$ version ) {
692
+ return new Reference ('assets.empty_version_strategy ' );
693
+ }
694
+
695
+ $ def = new DefinitionDecorator ('assets.static_version_strategy ' );
696
+ $ def
697
+ ->replaceArgument (0 , $ version )
698
+ ->replaceArgument (1 , $ format )
699
+ ;
700
+ $ container ->setDefinition ('assets._version_ ' .$ name , $ def );
701
+
702
+ return new Reference ('assets._version_ ' .$ name );
703
+ }
704
+
622
705
/**
623
706
* Loads the translator configuration.
624
707
*
0 commit comments