Symfony2 Assetic неверный путь ресурсов cssrewrite в файлах css/less

Фильтр cssrewrite создает неправильные URL-адреса после перезаписи: У меня есть мой пакет, содержащий один .less файл, расположенный в Ресурсы /public/less/common.less

У меня также есть одно изображение, расположенное в Ресурсах /public/images/colorfulbg.jpg

i выполняется из командной строки:

php app/console assets:install web --symlink

который создает в веб-каталоге правильную публичную структуру:

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 и assetic bundle 2.3 Спасибо вам

Ответ 1

Использование неверного типа определений для ваших активов в шаблоне, см. ниже (обратите внимание на префикс @). Также в вашем 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

Я восстанавливаю линию и после того, как снова пинаю апелляцию, они вернулись... Я думаю, что эта рекомендация не учитывает тот факт, что участвует LESS?

Ответ 2

У меня была такая же проблема при указании опции write_to для assetic (предположим, я хотел, чтобы мои стили выводились в 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 будет давать неправильные пути, а второй - отлично.

Ответ 3

Это обычная проблема, я предлагаю вам не использовать фильтр cssrewrite и использовать URL-адреса с / в начале

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

Конечно, этот подход имеет недостаток, что веб-сайт должен быть установлен в корневой каталог для домена, но, честно говоря, я не видел проект Symfony, установленный в подкаталоге.