在Symfony2中包含bundle的资源的正确方法

时间:2013-07-29 20:49:19

标签: symfony twig symfony-2.3

我有这个结构的捆绑包:

/src/BankBundle/
    ...
    /src/BankBundle/Resources/
        ...
        public/
            css/
                foundation-datepicker.css
            js/
                common.js
                foundation-datepicker.js
        ...
    ...

所以我想在我的模板中包含CSS和JS,我正在这样做:

{% extends "::base.html.twig" %}

{% block javascripts %} 
{{ parent() }}
<script src="{{ asset('/js/foundation-datepicker.js') }}" type="text/javascript"></script> 
<script src="{{ asset('/js/common.js') }}" type="text/javascript"></script> 
{% endblock %} 

{% block stylesheets %}
{{ parent() }}
<link href="{{ asset('/css/foundation-datepicker.css') }}" rel="stylesheet" />
{% endblock %}

但它不起作用,因为Firebug控制台说 404错误:找不到所以什么是从我的包中包含资源的正确方法?我还运行任务php app/console assets:install --symlink,因此我对这些文件进行了符号链接

3 个答案:

答案 0 :(得分:2)

查看符号链接文件夹的外观。

它们的格式为bundles/<bundlename-without-Bundle> ...

asset()函数生成的路径与您的web文件夹相关。

{{ asset('bundles/bank/css/foundation-datepicker.css') }}

您也可以使用@Bundle语法,但请注意,某些过滤器(即cssrewrite)无法使用此语法。

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

答案 1 :(得分:2)

由于你已经设置了符号链接,你应该可以这样做:

{{ asset( 'bundles/lowercasebundlename/js/foundation-datepicker.js' ) }}

但是让Assetic转储文件可能仍然会更好:

{% javascripts '@BundleName/Resources/public/js/*' %}
    <script src="{{ asset_url }}" type="text/javascript"></script>
{% endjavascripts %}

答案 2 :(得分:0)

Symfony在bundles下的/web目录中安装捆绑资源。我相信正确的路径是/bundles/bank/css/xxx.css:

{% block stylesheets %}
    {{ parent() }}
    <link href="{{ asset('bundles/bank/css/foundation-datepicker.css') }}" rel="stylesheet" />
{% endblock %}