Symfony2:如何在bundle之间共享js libs和css

时间:2012-06-25 15:41:03

标签: symfony assets assetic

我有不同的套装:MainBundle(主页),SecurityBundle(登录,注册),MessageBundle(消息系统),ShopBundle。

我也遵循三阶段布局架构(:: base.html.twig,AcmeMainBundle :: layout.html.twig,AcmeMainBundle:默认:index.html.twig)。

但我在通过应用程序(例如jquery)和定义base.css(设置一些基类,背景,字体等)共享公共js库时遇到问题。

那么使用共享css和js的最佳方法是什么,而不必失去资产支持?

一个想法是创建一个CommonBundle,它包含所有全局js和css以及一些布局文件,但我不认为这是处理这个问题的最佳方法......

2 个答案:

答案 0 :(得分:17)

如果要在所有捆绑包中共享公共资产,最好的选择是将它们放在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托管的常见缓存版本。这种做法可以加快您的应用程序响应时间。

答案 1 :(得分:0)

使用最新版本的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()函数。