Symfony2:如何在包之间共享 js 库和 css
Posted
技术标签:
【中文标题】Symfony2:如何在包之间共享 js 库和 css【英文标题】:Symfony2: How to share js libs and css between bundles 【发布时间】:2012-06-26 21:35:05 【问题描述】:我有不同的捆绑包:MainBundle(主页)、SecurityBundle(登录、注册)、MessageBundle(消息系统)、ShopBundle。
我也遵循三阶段布局架构(::base.html.twig、AcmeMainBundle::layout.html.twig、AcmeMainBundle:Default:index.html.twig)。
但我在通过应用程序(例如 jquery)共享通用 js 库和定义 base.css(设置一些基类、背景、字体等)时遇到问题
那么在不失去资产支持的情况下使用共享 css 和 js 的最佳方法是什么?
一个想法是创建一个包含所有全局 js 和 css 以及一些布局文件的 CommonBundle,但我认为这不是处理这个问题的最佳方式...
【问题讨论】:
【参考方案1】:如果您想在所有捆绑包之间共享公共资产,最好的选择是将它们放在app/Resources/public
目录中。例如:
app/Resources/Public
|-- css
| `-- base.css
|-- js
| `-- jquery.js
然后您可以在布局中引用它们,如下所示:
% block stylesheets %
% stylesheets '../app/Resources/public/css/*' %
<link rel="stylesheet" type="text/css" charset="UTF-8" media="all" href=" asset_url "/>
% endstylesheets %
% endblock %
% block javascripts %
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
% javascripts '../app/Resources/public/js/*' %
<script type="text/javascript" src=" asset_url "></script>
% endjavascripts %
% endblock %
备注:如您所见,对于像 jQuery 这样的常用库,最好的选择仍然是使用 Google 托管的常用缓存版本。这种做法可以加快您的应用程序响应时间。
【讨论】:
我找到了一种更好的方法:您可以在 config.yml 的资产部分定义自己的库,其中包含您的库和依赖项。这些可以通过快捷方式轻松加载。详情见这里:***.com/questions/10830129/… 这就是你喜欢的学校。您找到的解决方案将资产路径的详细信息隐藏到 config.yml 中,我建议的解决方案将此类详细信息直接嵌入到 Twig 模板中。 确实!我仍然在 css 文件中提供 app/Resources/public/img 中的背景图像。我用过 css rewrite 但assetic似乎不知道你可以将图像存储在基本目录中 在尝试了各种方法(使用网络目录,此处建议的方法并创建设计包)后,我认为创建设计包是最好的答案【参考方案2】:使用最新版本的 Symfony (2.5) 我发现 fsenart 的响应在我的情况下不起作用。 相反,我将包含共享内容的公共文件夹放入 web 文件夹:
web/public
--js
--css
然后在主布局中使用它,下面的代码可以工作:
% block javascripts %
% javascripts 'public/js/*' %
<script type="text/javascript" src=" asset_url "></script>
% endjavascripts %
% endblock %
但要使其正常工作,不要忘记在子布局中使用 javascript 块时调用 Twig parent() 函数。
【讨论】:
以上是关于Symfony2:如何在包之间共享 js 库和 css的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有完整项目的情况下测试共享的 Symfony 2 Bundle