Я столкнулся с очень-очень похожей проблемой.
Вкратце:
- Желание иметь оригинальный CSS во "внутреннем" каталоге (Resources / assets / css/a.css)
- Желая, чтобы изображения были в "общедоступном" каталоге (Resources / public / images / devil.png)
- Если этот ветвь принимает этот CSS, перекомпилирует его в сеть/css/a.css и сделайте так, чтобы он указывал на изображение в /web/bundles/mynicebundle/images/devil.png
Я провел тест со ВСЕМИ возможными (вменяемыми) комбинациями из следующих:
- @ нотация, относительная нотация
- Разбор с помощью cssrewrite, без него
- Фон изображения CSS против прямого тега src = для того же изображения, что и CSS
- Синтаксический анализ CSS при сборке, а также без синтаксического анализа с прямым выводом сборки
- И все это умножается на попытку "public dir" (как
Resources/public/css
) с CSS и "private" каталогом.(как Resources/assets/css
).
Это дало мне в общей сложности 14 комбинаций на одной веточке, и этоOUT был запущен из
- "/ app_dev.php /"
- "/ app.php /"
- и "/"
, что дает 14 x 3 = 42 теста.
Кроме того, все это было протестировано, работая в подкаталоге, поэтому невозможно обмануть, предоставив абсолютные URL, потому что они просто не будут работать.
Тесты представляли собой два безымянных изображения, а затем элементы div, названные от 'a' до 'f' для CSS, созданного из общей папки, и названные от 'g до' l 'для тех, которые построены из внутреннего пути.
Я заметил следующее:
Только 3 из 14 тестов были адекватно показаны на трех URL.И NONE был из "внутренней" папки (Resources / assets).Это было необходимым условием, чтобы иметь запасную CSS PUBLIC и затем собирать ее с помощью сборки FROM.
Вот результаты:
Результат запущен с помощью /app_dev.php/
Результат запущен с /app.php/
Результат запущен с /
Итак ... ТОЛЬКО - Второе изображение - Div B - Div C - допустимые синтаксисы.
Здесь есть код TWIG:
<html>
<head>
{% stylesheets 'bundles/commondirty/css_original/container.css' filter="cssrewrite" %}
<link href="{{ asset_url }}" rel="stylesheet" type="text/css" />
{% endstylesheets %}
{# First Row: ABCDEF #}
<link href="{{ '../bundles/commondirty/css_original/a.css' }}" rel="stylesheet" type="text/css" />
<link href="{{ asset( 'bundles/commondirty/css_original/b.css' ) }}" rel="stylesheet" type="text/css" />
{% stylesheets 'bundles/commondirty/css_original/c.css' filter="cssrewrite" %}
<link href="{{ asset_url }}" rel="stylesheet" type="text/css" />
{% endstylesheets %}
{% stylesheets 'bundles/commondirty/css_original/d.css' %}
<link href="{{ asset_url }}" rel="stylesheet" type="text/css" />
{% endstylesheets %}
{% stylesheets '@CommonDirtyBundle/Resources/public/css_original/e.css' filter="cssrewrite" %}
<link href="{{ asset_url }}" rel="stylesheet" type="text/css" />
{% endstylesheets %}
{% stylesheets '@CommonDirtyBundle/Resources/public/css_original/f.css' %}
<link href="{{ asset_url }}" rel="stylesheet" type="text/css" />
{% endstylesheets %}
{# First Row: GHIJKL #}
<link href="{{ '../../src/Common/DirtyBundle/Resources/assets/css/g.css' }}" rel="stylesheet" type="text/css" />
<link href="{{ asset( '../src/Common/DirtyBundle/Resources/assets/css/h.css' ) }}" rel="stylesheet" type="text/css" />
{% stylesheets '../src/Common/DirtyBundle/Resources/assets/css/i.css' filter="cssrewrite" %}
<link href="{{ asset_url }}" rel="stylesheet" type="text/css" />
{% endstylesheets %}
{% stylesheets '../src/Common/DirtyBundle/Resources/assets/css/j.css' %}
<link href="{{ asset_url }}" rel="stylesheet" type="text/css" />
{% endstylesheets %}
{% stylesheets '@CommonDirtyBundle/Resources/assets/css/k.css' filter="cssrewrite" %}
<link href="{{ asset_url }}" rel="stylesheet" type="text/css" />
{% endstylesheets %}
{% stylesheets '@CommonDirtyBundle/Resources/assets/css/l.css' %}
<link href="{{ asset_url }}" rel="stylesheet" type="text/css" />
{% endstylesheets %}
</head>
<body>
<div class="container">
<p>
<img alt="Devil" src="../bundles/commondirty/images/devil.png">
<img alt="Devil" src="{{ asset('bundles/commondirty/images/devil.png') }}">
</p>
<p>
<div class="a">
A
</div>
<div class="b">
B
</div>
<div class="c">
C
</div>
<div class="d">
D
</div>
<div class="e">
E
</div>
<div class="f">
F
</div>
</p>
<p>
<div class="g">
G
</div>
<div class="h">
H
</div>
<div class="i">
I
</div>
<div class="j">
J
</div>
<div class="k">
K
</div>
<div class="l">
L
</div>
</p>
</div>
</body>
</html>
В файле container.css:
div.container
{
border: 1px solid red;
padding: 0px;
}
div.container img, div.container div
{
border: 1px solid green;
padding: 5px;
margin: 5px;
width: 64px;
height: 64px;
display: inline-block;
vertical-align: top;
}
И a.css, b.css, c.css и т. Д. Все идентичные, просто изменив цвет и селектор CSS.
.a
{
background: red url('../images/devil.png');
}
Структура "каталогов":
Каталоги
Все это пришло, потому что я не хотел, чтобы отдельные исходные файлы были доступны общественности,особенно, если я хотел поиграть с фильтром "less", "sass" или аналогичным ... Я не хотел публиковать свои "оригиналы", только скомпилированный.
Но есть хорошие новости .Если вы не хотите иметь «запасной CSS» в общедоступных каталогах ... установите их не с --symlink
, а просто сделайте копию.Как только «сборка» создала составной CSS, и вы можете УДАЛИТЬ исходный CSS из файловой системы и оставить изображения:
Процесс компиляции
ПримечаниеЯ делаю это для среды --env=prod
.
Несколько заключительных мыслей:
Это желаемое поведение может быть достигнуто при наличии изображений в "public" каталоге в Git или Mercurial и "css" в каталоге "assets".То есть вместо того, чтобы иметь их в «общедоступных», как показано в каталогах, представьте, что a, b, c ... находятся в «активах» вместо «public», чем ваш установщик / развертыватель (вероятно, Сценарий Bash ) для временного помещения CSS в каталог "public" перед выполнением assets:install
, затем assets:install
, assetic:dump
, а затем автоматическое удаление CSS из публичного каталога после того, как assetic:dump
был казнен.Это дало бы ТОЧНО желаемое поведение в вопросе.
Другое (неизвестное, если возможно) решение состоит в том, чтобы выяснить, может ли «assets: install» принимать только «общедоступный» в качестве источника или также может принимать «ресурсы» в качестве источника для публикации.Это помогло бы при установке с опцией --symlink
при разработке.
Кроме того, если мы собираемся записать сценарий удаления из «публичного» каталога, то необходимость их храненияв отдельном каталоге («активы») исчезает.Они могут жить внутри "public" в нашей системе контроля версий, так как они будут отброшены при развертывании для публики.Это также позволяет использовать --symlink
.
НО ВСЕГДА, ВНИМАНИЕ СЕЙЧАС: Поскольку теперь оригиналов больше нет (rm -Rf
), естьтолько два решения, а не три.Рабочий div "B" больше не работает, так как это был вызов asset (), если исходный актив был.Будет работать только "C" (скомпилированный).
Итак ... есть ТОЛЬКО ФИНАЛЬНЫЙ ПОБЕДИТЕЛЬ: Div "C" позволяет ТОЧНО то, что было задано в теме: для компиляции уважайте путьк изображениям и не раскрывайте первоисточник публике.
Победитель C