这有点令人沮丧。根据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:
答案 0 :(得分:5)
要修复资产异常,您需要在config.yml中配置捆绑包,如下所示:
assetic:
bundles: [ MyAwesomeBundle ]
{{ asset(...) }}
twig函数将提供相对于您的网络根目录的文件。
您使用app/console assets:install
在您的网络根目录中安装静态资产,之后您可以使用资产功能轻松指向他们,例如{{ asset('/mybundle/css/site.css') }}