Symfony2: добавляем новую цель для ассетического поисковика

В моем проекте symfony у меня есть пакет под названием Modules, который включает множество модулей, каждый из которых сохранен в отдельном каталоге в каталоге src / ModuleBundle / Modules, и у них есть отдельные файлы twig в качестве шаблонов.
файловая структура для демонстрационного модуля с именем RandomImage

src
   ModuleBundle
       Modules
           RandomImage
               Resources
                   views
                   public

У меня нет проблем с загрузкой файлов twig для каждого модуля, но моя проблема связана с функцией Assetic: dump, которая не может найти мои модули Assetic.
Symfony переместится во все файлы twig и загрузит все файлы сборки, которые перечислены внутри блока {% stylesheets%} и {% javascripts%} или используются в { {asset ()}} функция.
В своем исследовании я понял, что поиск Symfony и сборка карт имеют две цели.

  1. активы, перечисленные в файле ветки базового шаблона (например, app / Resources / views / base.html.twig)
  2. активы, перечисленные в каждом из файлов twig пакетов (например, src / myBundle / Resources / views / index.html.twig)


Как я могу добавить новую цель для Symfony для получения ассетических файлов из их файлов ветки?


person Vahid Kh    schedule 08.06.2013    source источник
comment
Я думаю, вам следует создать пространство имен Module, которое содержит отдельные пакеты внутри (src > Modules > RandomImageBundle), bundle является синонимом модуля, поэтому ваша архитектура выглядит действительно избыточной.   -  person Alain Tiemblo    schedule 09.06.2013


Ответы (1)


Assetic имеет конфигурацию, по которой нужно искать пакеты - Assetic.bundles, найденные в config.yml:

assetic:
    bundles:

        # Defaults (all currently registered bundles):
        - FrameworkBundle
        - SecurityBundle
        - TwigBundle
        - ...

Удостовериться:

  • Assetic.bundles не настроен или установлен на ~
  • в противном случае убедитесь, что ваш пакет указан там
  • ваш пакет зарегистрирован в app / AppKernel.php

Чтобы изменить ресурсы по умолчанию для расширения Symfony / AsseticBundle (т.е. через наследование пакетов)

vendor\symfony\assetic-bundle\Symfony\Bundle\AsseticBundle\DependencyInjection\Compiler\TemplateResourcesPass.php

структура папок ресурсов / представлений по умолчанию может быть найдена в строке 50-70 (начиная с Symfony 2.3)

$container->getParameter('kernel.root_dir').'/Resources/'.$bundleName.'/views',
// ...
$bundleDirName.'/Resources/views',
// ...
new DirectoryResourceDefinition('', $engine, array($container->getParameter('kernel.root_dir').'/Resources/views'))

ResourceDefinitions загружаются в CompilerPass - подробнее об этом здесь.

person Nicolai Fröhlich    schedule 09.06.2013
comment
Спасибо за ответ, но это не моя цель, потому что ModuleBundle может содержать некоторый модуль, который сохранен в подкаталоге в корневом каталоге ModuleBundle (src > Acme > ModuleBundle > Modules), и поскольку файлы twig не находятся в файловой структуре Symfony по умолчанию ( src > Acme > ModuleBundle > Resources > views) он не может найти их файлы ветки, я хочу найти, где Symfony генерирует список целевых каталогов для поиска их файлов ветки - person Vahid Kh; 09.06.2013
comment
обновил свой ответ дополнительной информацией. это то, что вы ищете, верно? - person Nicolai Fröhlich; 10.06.2013