4

我有不同的捆绑包: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,但我认为这不是处理这个问题的最佳方法......

4

2 回答 2

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 托管的常用缓存版本。这种做法可以加快您的应用程序响应时间。

于 2012-06-25T15:45:24.123 回答
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() 函数。

于 2015-02-25T23:06:17.523 回答