Symfony2 Assetic在css / less文件中错误的cssrewrite资源路径

时间:2013-10-31 23:10:48

标签: css symfony less twig assetic

cssrewrite过滤器在重写后产生错误的url: 我有我的包,其中包含一个.less文件 资源/ public / less / common.less

我还有一张图片,位于 Resources / public / images / colorfulbg.jpg

我从命令行运行:

php app/console assets:install web --symlink

在web目录中生成正确的公共结构:

web
+--bundles
   +--mybundle
      +--less
      |  +--common.less
      |
      +--images
         +--colorfulbg.jpg

在我的模板中,我有以下内容:

{% stylesheets 'bundles/mybundle/less/*' filter='cssrewrite,less' %}
  <link rel="stylesheet" href="{{ asset_url }}" type="text/css" />
{% endstylesheets %}

该文件夹只包含一个.less文件,它只是:

@bg: #f4f4f4;
body 
{
  background-image: @bg url(../images/colorfulbg.jpg);
}

有一些错误,因为重写的背景路径是:

url(../../bundles/mybundle/images/colorfulbg.jpg);

因此未应用背景

我做错了什么?

我正在使用symfony 2.3和资产包2.3 谢谢

3 个答案:

答案 0 :(得分:0)

您在模板中对资产使用了错误的定义类型,请参阅以下内容(请注意@前缀)。同样在你的CSS中你必须从你的Bundle / Resources / public / less文件夹中相对下来。所以它不是/bundles/../bundles ,而是 最有可能 ../images/

    {% stylesheets filter='less,cssembed,?yui_css' output='css/final.css'
        '@AcmeDemoBundle/Resources/public/beautifulslider.css'
        '@AcmeDemoBundle/Resources/public/less/site.less'
    %}
    <link href="{{ asset_url }}" type="text/css" rel="stylesheet" media="screen" />
    {% endstylesheets %}

<强> UPDATE1

鉴于上述情况,我的一个项目处于相同类型的设置中,它仍处于2.2但我不认为这很重要,我只是尝试从我的.less中删除这些行

    & > a {
    background:transparent url('../images/btn-big-gray.png') repeat-x;
    }

图像消失后

    xxx michael [master] $ app/console assetic:dump --env=dev

我恢复了这条线,并且在再次踢出资产之后他们又回来了......我认为dis推荐不计入LESS所涉及的事实?

答案 1 :(得分:0)

为assetic指定write_to选项时遇到了同样的问题(假设,我希望我的样式输出到web/assets/css/styles.css):

assetic:
    write_to:       '%kernel.root_dir%/../web/assets'

    assets:
        my_stylesheets:
            output: 'css/styles.css'
            inputs:
                - 'bundles/mybundle/css/styles.css'

我找不到更好的解决方案,而不是为web/选项指定write_to文件夹以外的任何内容(或根本不指定它)。但是,您仍然可以为每个单独的资产使用子文件夹:

assetic:
    write_to:       '%kernel.root_dir%/../web'

    assets:
        my_stylesheets:
            output: 'assets/css/styles.css'
            inputs:
                - 'bundles/mybundle/css/styles.css'

P.S。在两种大写的情况下,样式都在web/assets/css/styles.css中,但在第一种情况下,csrewrite将提供不正确的路径,而第二种情况则可以正常工作。

答案 2 :(得分:-3)

这是一个常见问题,我建议您不要使用cssrewrite过滤器,并在开头使用带/的网址

url("/bundles/mybundle/images/colorfulbg.jpg");

当然这种方法有一个缺点,即网站必须安装在域的根目录中,但说实话,我没有看到子目录中安装的Symfony项目。