允许 bundle 扩展 Assetic 的资产配置
Posted
技术标签:
【中文标题】允许 bundle 扩展 Assetic 的资产配置【英文标题】:Allow bundle to extend asset configuration of Assetic 【发布时间】:2015-04-03 21:28:30 【问题描述】:我目前正在努力满足这个要求:我们有一个模块化应用程序,客户可以在其中按需启用模块。每个模块都是一个包。现在我们有了某种仪表板,我想根据安装的模块/捆绑包注入资产(JS/CSS)。此外,我想将这些文件合并到一个“dashboard.js|css”文件中,这样我们每个捆绑的 js 和 css 文件就没有 1 个请求。
对于其他文件,我们使用了 Twig 的 Assetic 集成和命名资产的组合,但配置密钥 assetic.assets
似乎不能在包的扩展类中公开访问......这很遗憾' d 是我们方法的一种非常简单的方法。
我还研究了一个自定义配置/服务组合,以将资产加载器注入资产 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】:您可以为此使用资产配置来编译一个文件,其中包含每个捆绑包的所有需求。也许你可以在你的配置中有一堆这些条目,全部定制,然后只调用你需要的组合的一个文件。例如
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
我不完全理解您的第二个问题,但听起来您可能想要为此提供服务,如果它太涉及您必须这样做的方式。
【讨论】:
我的问题是我无法硬编码config.yml
中的输入文件。我将更新我的问题以显示我的目标配置。以上是关于允许 bundle 扩展 Assetic 的资产配置的主要内容,如果未能解决你的问题,请参考以下文章
Symfony 2 Assetic 致命错误:在资产转储中找不到类“Assetic\Util\PathUtils”
Symfony2 Assetic 从控制器内部获取资产 url,而不是模板