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, установленный в подкаталоге.