Symfony2 Assetic wrong cssrewrite resources path in css/less files

Stormsson picture Stormsson · Nov 1, 2013 · Viewed 10.2k times · Source

The cssrewrite filter produces wrong urls after the rewrite: i have my bundle which contains one .less file located in Resources/public/less/common.less

I also have one image,located in Resources/public/images/colorfulbg.jpg

i run from the command line :

php app/console assets:install web --symlink

which produces in the web directory the correct public structure:

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

in my template i have the following:

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

That folder just contains one .less file , which is simply:

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

There is something wrong, since the rewrited background path is:

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

and therefore the background is not applied

What am i doing wrong?

I am using symfony 2.3 and assetic bundle 2.3 Thank you

Answer

Multis picture Multis · Jan 11, 2018

I had the same problem when specifying write_to option for assetic (suppose, I wanted my styles output into 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'

I could not find a better solution rather then not specifying anything else than web/ folder for write_to option (or not specifying it at all). However, you can still use subfolders for every separate asset:

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

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

P.S. In both of upper cases styles will be in web/assets/css/styles.css, but in first case csrewrite will give incorrect paths, while the second one will work fine.