在Symfony2中使用assetic加载一个js文件

时间:2013-09-11 19:13:33

标签: symfony assetic

我是Symfony 2的新手。之前我曾在Codeigniter工作过很多次。现在我正在探索资产,我无法理解如何将单个文件添加到已经加载的JS文件堆栈中。

我有一个主页twig文件,其中包含以下内容:

{% javascripts '@BlogBlogBundle/Resources/public/js/vendor/*' output='js/combined.js' %}
  <script type="text/javascript" src="{{ asset_url }}"></script>
{% endjavascripts %}

现在,如果所有JS文件都在供应商文件夹中,则此工作正常。但是,如果我在一个名为contact的文件夹中有一个JS文件contact.js,我希望它只在联系页面上可见。所以,当我在联系页面twig文件的块体内添加这样的代码时

{% javascripts '@BlogBlogBundle/Resources/public/js/home/*' output='js/home_combined.js' %}
  <script type="text/javascript" src="{{ asset_url }}"></script>
{% endjavascripts %}

contact.js将在正文结束之前加载的所有其他js文件之前到来。

在codeigniter中,使用Carabiner库我可以设置我想在所有页面上加载的默认文件,比如jQuery。如果页面有任何特定文件,我可以在该特定控制器内执行此操作。

请告诉我如何在Symfony中做到这一点。

2 个答案:

答案 0 :(得分:2)

您可以像这样在资源中添加文件:

{% javascripts
    '@YourBundle/Resources/public/js/*'
    '@AnotherBundle/Resources/public/js/some.js'
    '@YourBundle/Resources/public/vendor/someother.js'
    output="filename.js"
%}
    <script src="{{ asset_url }}"></script>
{% endjavascripts %}

为了拥有您可以使用的预定义资产集合,例如'@js_default',您可以按照my answer here中的建议在assetic.assets配置中添加这些资产集合。

答案 1 :(得分:1)

要在主文件js文件之后添加contact.js,您可以执行以下操作。

    {% block javascripts %}
       {{- parent() -}}
       {% javascripts "@AcmeBundle/Resources/public/js/contact.js"  %} 
                 <script type="text/javascript" src="{{ asset_url }}" ></script>
       {% endjavascripts %}
    {% endblock %}