使用Assetic / Twig / Symfony2,我可以定义前端库吗?

时间:2012-05-31 08:40:48

标签: symfony twig assetic

我正在使用Symfony2,包含Assetic和Twig。我有各种前端库 - Backbone,jQuery,jQuery UI和Bootstrap。 Bootstrap和jQuery UI都包含CSS和JS文件。

有没有办法可以定义他们需要包含的资源(包括依赖项),然后在Twig / Assetic中只包含一个标签中的所有资源?我希望看到的是:

// config.yml <!-- DOES NOT WORK -->
assetic:
  resources:
    jquery:
      js: /filepath/to/jquery.js
    jquery_ui:
      dependencies: jquery
      css: /filepath/to/jqueryui.css
      js: /filepath/to/jqueryui.js
    less:
      js: /filepath/to/less.js
    bootstrap:
      dependencies: { less, jquery }
      js: /filepath/to/bootstrap.js
      css: /filepath/to/bootstrap.css
    backbone:
      dependencies: { jquery }
      js: { /filepath/to/underscore.js, /filepath/to/backbone.js }

// view.html.twig
{% use jquery_ui %}
{% use bootstrap %} 

// outputs all js and css for jQuery, jQueryUI, Less, Backbone, and Bootstrap

我发现了几个相关的问题:

但似乎都没有涉及在config.yml中定义资源。相反,他们在base.html.twig中定义它们,但这正是我想要避免的。

我尝试在Twig中使用use标记,方法是定义名为“jquery_ui”的模板,然后在该块中使用{% stylesheets %}{% javascripts %},然后在base.html.twig中{ {1}}。但是,{% use "jquery-ui.html" %}不会导入模板,因为它有一个正文。

3 个答案:

答案 0 :(得分:16)

虽然确实支持定义前端库,但遗憾的是不支持依赖解析。您还必须单独定义CSS和JavaScript。

我一直在做的是在/app/config/中创建一个名为assets.yml的单独文件,并将其包含在主要配置中以保持清洁。

assetic:
    assets:
        jquery:
            inputs:
                - '%kernel.root_dir%/Resources/public/js/jquery.js'
                - '%kernel.root_dir%/Resources/public/js/jquery-ui.js'
        my_lib:
            inputs:
                - '%kernel.root_dir%/Resources/public/js/my-custom-lib.js'
                - ...

请注意,默认情况下,'%kernel.root_dir%'会在Symfony2中解析为app目录。您现在可以在Twig模板中使用资产。

{% block javascripts %}
    {% javascripts '@jquery' '@my_lib' output="js/jquery.js" %}
        <script type="text/javascript" src="{{ asset_url }}"></script>
    {% endjavascripts %}
{% endblock %}

对CSS文件也可以这样做。该示例还说明了为什么不能将CSS和JavaScript定义为单个资产。

答案 1 :(得分:1)

最简单的解决方案是将它们放在web /目录中的相应目录中,因为这是为所有Symfony软件包提供的站点的根目录。

答案 2 :(得分:0)

您可能想要查看Cartero,它允许您定义“资产包”,包括依赖项,然后在页面中包含这些包。

https://github.com/rotundasoftware/cartero

你需要写一个Symfony2 Hook,但这不会太难。