2

在我的 symfony 项目中,我有一个名为 Modules 的包,其中包含许多模块,每个模块都保存在单独的目录中到src/ModuleBundle/Modules目录中,并且它们有单独的 twig 文件作为模板。
名为 RandomImage 的示例模块的文件结构

src
   ModuleBundle
       Modules
           RandomImage
               Resources
                   views
                   public

我为每个模块加载树枝文件没有任何问题,但我的问题是关于资产的:转储函数找不到我的模块资产。
Symfony 移动到所有 twig 文件并获取列在{% stylesheets %}{% javascripts %}块中或在{{asset() }}函数中使用的所有资产文件。
在我的研究中,我了解 Symfony 在两个目标中搜索和映射资产

  1. 基本模板树枝文件中列出的资产(例如 app/Resources/views/base.html.twig)
  2. 在每个捆绑树枝文件中列出的资产(例如 src/myBundle/Resources/views/index.html.twig)


如何为 Symfony 添加新目标以从其树枝文件中获取资产文件?

4

1 回答 1

1

Assetic 有一个用于搜索哪​​个包的配置——在config.yml中找到的assetic.bundles:

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

默认的 Resources/views 文件夹结构可以在第 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 中加载 - 在此处阅读有关它的更多信息。

于 2013-06-09T00:18:02.877 回答