Symfony 2.1 - 加载资产的问题和资产引发的异常

时间:2012-11-24 16:56:26

标签: php exception twig symfony-2.1 assetic

这有点令人沮丧。根据Symfony最佳实践,捆绑的Web资产(images,css,js)应放在src/vendor/path/to/bundle/Resources/public中。运行app/console assets:install会将该公用文件夹的内容复制到web/bundles/bundlename。在官方文档中,Twig模板显示为使用以下代码获取这些资产:

{% block stylesheets %}
    <link rel="stylesheet" type="text/css" href="{{ asset('/css/styles.css') }}
{% endblock %}

当我尝试它时,而不是从web/bundles/bundlename/css/styles.css神奇地抓取我的资产,而不是仅仅web/css/styles.css。这是预期的行为吗?官方文件对此不太清楚。

为了尝试解决这个问题,我尝试了拥抱资产动态服务资产的能力。我试过了:

{% stylesheets '@mybundle/Resources/public/css/*' %}
    <link rel="stylesheet" type="text/css" href="{{ asset_url }}" />
{% endstylesheets %}

但得到以下例外:

  

在编译模板期间抛出异常(“您必须将mybundle添加到assetic.bundle配置以使用mybundle中的{%stylesheets%}标记:主页:index.html.twig。”) /home/kevin/www/src/mybundle/Resources/views/Home/index.html.twig

official Symfony documentation似乎无需配置即可开箱即用。

所以,TLDR:

  1. 我不明白应该如何加载资产?
  2. 如何处理资产例外?

1 个答案:

答案 0 :(得分:5)

要修复资产异常,您需要在config.yml中配置捆绑包,如下所示:

assetic:
    bundles: [ MyAwesomeBundle ]

{{ asset(...) }} twig函数将提供相对于您的网络根目录的文件。

您使用app/console assets:install在您的网络根目录中安装静态资产,之后您可以使用资产功能轻松指向他们,例如{{ asset('/mybundle/css/site.css') }}