【问题标题】:Symfony2: How to share js libs and css between bundlesSymfony2:如何在包之间共享 js 库和 css
【发布时间】: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,但我认为这不是处理这个问题的最佳方式...

【问题讨论】:

    标签: symfony assets assetic


    【解决方案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 的资产部分定义自己的库,其中包含您的库和依赖项。这些可以通过快捷方式轻松加载。详情见这里:stackoverflow.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() 函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-13
      • 2013-11-10
      • 1970-01-01
      • 1970-01-01
      • 2021-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多