从包含的 Twig 模板中干净地添加 JS 和 CSS
Posted
技术标签:
【中文标题】从包含的 Twig 模板中干净地添加 JS 和 CSS【英文标题】:Adding JS and CSS cleanly from included Twig templates 【发布时间】:2012-09-22 20:59:05 【问题描述】:我正在寻找是否有一种干净的方法可以从包含的模板中添加 JS 和 CSS。
例如,如果 layout.html.twig 有:
% include 'GenericBundle:Generic:page.html.twig' with 'data': data %
...
% block javascript %
% javascripts
'@GenericBundle/Resources/public/js/app/jquery/jquery.min.js'
'@GenericBundle/Resources/public/js/lib/bootstrap/bootstrap.min.js'
%
<script src=" asset_url "></script>
% endjavascripts %
% endblock %
在通用捆绑页面中,我想包含更多 Javascript,但将其添加到已建立的 Javascript 块中以保持 HTML 和 JS 最佳实践。
有没有一种干净的方法可以做到这一点?我正在使用 Symfony2,可能会使用 Singletons 之类的解决方案组合在一起,但如果有可用的方法,我宁愿使用更清洁的方法。
【问题讨论】:
【参考方案1】:我知道我参加聚会有点晚了,但是在 Twig 1.2 中,您可以使用 use 标签和 block 函数:
GenericBundle:Generic:page.html.twig
% block javascripts %
<script src="..."></script>
% endblock %
% block included_content %
Bar
% endblock %
layout.html.twig
% use 'GenericBundle:Generic:page.html.twig' with javascripts as page_javascripts %
% block javascript %
% javascripts
'@GenericBundle/Resources/public/js/app/jquery/jquery.min.js'
'@GenericBundle/Resources/public/js/lib/bootstrap/bootstrap.min.js'
%
<script src=" asset_url "></script>
% endjavascripts %
block('page_javascript') // Don't forget the 'braces'
% endblock %
...
block('included_content') // Don't forget the 'braces'
【讨论】:
您必须在 block('page_javascript') 中加上引号才能使其正常工作,否则您会收到“变量...不存在...”错误消息 % include ... with javascripts: block('javascripts') % 对我来说很好。以上是关于从包含的 Twig 模板中干净地添加 JS 和 CSS的主要内容,如果未能解决你的问题,请参考以下文章
Symfony2 Assetic + Twig 模板 JavaScript 继承
从 Symfony 请求中获取路由并将其传递给包含的 twig 文件?