TemplateResourcesPass.php 2.4KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. <?php
  2. /*
  3. * This file is part of the Symfony framework.
  4. *
  5. * (c) Fabien Potencier <fabien@symfony.com>
  6. *
  7. * This source file is subject to the MIT license that is bundled
  8. * with this source code in the file LICENSE.
  9. */
  10. namespace Symfony\Bundle\AsseticBundle\DependencyInjection\Compiler;
  11. use Symfony\Component\DependencyInjection\ContainerBuilder;
  12. use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
  13. use Symfony\Bundle\AsseticBundle\DependencyInjection\DirectoryResourceDefinition;
  14. /**
  15. * This pass adds directory resources to scan for assetic assets.
  16. *
  17. * @author Kris Wallsmith <kris@symfony.com>
  18. * @author Lukas Kahwe Smith <smith@pooteeweet.org>
  19. */
  20. class TemplateResourcesPass implements CompilerPassInterface
  21. {
  22. public function process(ContainerBuilder $container)
  23. {
  24. if (!$container->hasDefinition('assetic.asset_manager')) {
  25. return;
  26. }
  27. $engines = $container->getParameter('templating.engines');
  28. // bundle and kernel resources
  29. $bundles = $container->getParameter('kernel.bundles');
  30. $asseticBundles = $container->getParameterBag()->resolveValue($container->getParameter('assetic.bundles'));
  31. foreach ($asseticBundles as $bundleName) {
  32. $rc = new \ReflectionClass($bundles[$bundleName]);
  33. foreach ($engines as $engine) {
  34. $this->setBundleDirectoryResources($container, $engine, dirname($rc->getFileName()), $bundleName);
  35. }
  36. }
  37. foreach ($engines as $engine) {
  38. $this->setAppDirectoryResources($container, $engine);
  39. }
  40. }
  41. protected function setBundleDirectoryResources(ContainerBuilder $container, $engine, $bundleDirName, $bundleName)
  42. {
  43. $container->setDefinition(
  44. 'assetic.'.$engine.'_directory_resource.'.$bundleName,
  45. new DirectoryResourceDefinition($bundleName, $engine, array(
  46. $container->getParameter('kernel.root_dir').'/Resources/'.$bundleName.'/views',
  47. $bundleDirName.'/Resources/views',
  48. ))
  49. );
  50. }
  51. protected function setAppDirectoryResources(ContainerBuilder $container, $engine)
  52. {
  53. $container->setDefinition(
  54. 'assetic.'.$engine.'_directory_resource.kernel',
  55. new DirectoryResourceDefinition('', $engine, array($container->getParameter('kernel.root_dir').'/Resources/views'))
  56. );
  57. }
  58. }