允许bundle扩展Assetic的资产配置

时间:2015-02-04 11:16:48

标签: symfony configuration twig assets assetic

我目前正在努力满足这一要求:我们有一个模块化的应用程序,其中模块可以由客户按需启用。每个模块都是一个包。现在我们已经有了某种仪表板,我希望根据安装的模块/软件包注入资产(JS / CSS)。另外,我想将这些文件合并到一个"仪表板中。{js | css}"文件,以便我们不会为每个捆绑js和css文件提供1个请求。

对于其他文件,我们使用Twig的Assetic集成和命名资产的组合,但似乎配置键assetic.assets可以在一个包中公开访问扩展类...这是一个遗憾,因为它是我们方法的一个很棒的简单方法。

我还调查了一个自定义配置/服务对,将资产加载器注入资产AssetManager服务......但这感觉就像一个完全矫枉过正,我认为我只是错过了一些东西。

有什么想法吗?

更新1

我的目标是以下配置:

assetic: # Assetic Configuration
    assets:
        dashboard_js: 
            inputs:
                - '@ModuleOneBundle/Resources/public/js/dashboard.js'
                - '@ModuleTwoBundle/Resources/public/js/dashboard_dep.js'
                - '@ModuleTwoBundle/Resources/public/js/dashboard.js'
                - '@ModuleThreeBundle/Resources/public/js/dashboard.js'

我们的客户可以决定他们使用哪些模块,因此我无法对其进行硬编码。所以我试图使用Configuration课程,但他们无法访问我需要的内容。我想阻止运行自定义构建脚本来创建config.yml文件。

1 个答案:

答案 0 :(得分:0)

您可以使用资产配置来编译一个文件,其中包含每个捆绑包的所有needes。也许你可以在你的配置中有一堆这些条目,所有这些都是自定义的,然后只调用你需要组合的一个文件。 e.g。

assetic: # Assetic Configuration
    assets:
        js1combo: 
            inputs:
                - '@AppBundle/Resources/public/js/js1.js'
                - '@AppBundle/Resources/public/js/js2.js'
        js2combo: 
            inputs:
                - '@AppBundle/Resources/public/js/js2.js'
                - '@AppBundle/Resources/public/js/js3.js'
        js3combo: 
            inputs:
                - '@AppBundle/Resources/public/js/js1.js'
                - '@AppBundle/Resources/public/js/js2.js'

在您的文件中,只需要一个js文件

{% javascripts
    'js/js2combo.js'
%}
    <script src="{{ asset_url }}"></script>
{% endjavascripts %}

如果它有帮助,我有一个工具可以让你的编译任务更容易,你可以每天运行一次..我试图找到工作,如果有人可以帮助。这使我的资产生活更轻松。 : - )

https://github.com/wolfdogg/symphAstman

我完全不理解你的第二个问题,但听起来你可能想要为它做一个服务,如果它太过于涉及你必须这样做了。