Я зіткнувся з дуже-дуже такою ж проблемою.
Коротко:
- Готовність мати оригінальний CSS у "внутрішньому" режимі (Ресурси / активи / css / a.css)
- Готові мати зображення у "public" dir (Resources / public / images / devil.png)
- Хоча ця гілка забирає цей CSS, перекомпілює його у web / css / a.css і змушує вказати зображення в /web/bundles/mynicebundle/images/devil.png
Я зробив тест із ВСІМ можливими (розумними) комбінаціями з наступного:
- @ примітка, відносна нотація
- Розбір з cssrewrite, без нього
- Фон зображення CSS та безпосередньо <img> тег src = до того самого зображення, що й CSS
- CSS розбирається з активними, а також без аналізу з прямим результатом активів
- І все це помножено на спробу "public dir" (as
Resources/public/css
) з CSS та "private" каталогом (as Resources/assets/css
).
Це дало мені в цілому 14 комбінацій на одній гілочці, і цей маршрут був запущений з
- "/app_dev.php/"
- "/app.php/"
- і "/"
таким чином даючи 14 х 3 = 42 тести.
Крім того, все це було перевірено, працюючи у підкаталозі, тому немає можливості обдурити, надаючи абсолютні URL-адреси, оскільки вони просто не працюватимуть.
Тести були двома неназваними зображеннями, а потім діви, названі від 'a' до 'f' для CSS, побудованого з загальнодоступної папки, і названі 'g to' l 'для тих, побудованих із внутрішнього шляху.
Я спостерігав таке:
Лише 3 з 14 тестів були адекватно показані за трьома URL-адресами. І НІКОЛИ не був із "внутрішньої" папки (Ресурси / активи). Було необхідною умовою мати запасний CSS PUBLIC, а потім будувати з активними ВІД.
Ось такі результати:
Результат запущений за допомогою /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>
Контейнер.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');
}
Структура "каталогів":
Довідники
Все це прийшло, тому що я не хотів, щоб окремі оригінальні файли були відкриті для публіки, особливо якщо я хотів грати з фільтрами "менш" або "sass" чи подібними ... Я не хотів, щоб мої "оригінали" публікувалися, лише складено один.
Але є хороші новини . Якщо ви не хочете мати "запасний CSS" у загальнодоступних каталогах ... встановлюйте їх не разом --symlink
, а справді роблячи копію. Після того, як "Активік" створив складений CSS, ви можете вилучити оригінальний CSS з файлової системи та залишити зображення:
Процес компіляції
Примітка. Це я роблю для --env=prod
навколишнього середовища.
Лише кілька заключних думок:
Такої бажаної поведінки можна досягти, якщо зображення у загальнодоступному каталозі в Git або Mercurial та "css" у каталозі "активи". Тобто, замість того, щоб мати їх у "public", як показано в каталогах, уявіть собі a, b, c ..., що проживають у "активи" замість "public", ніж у вашого інсталятора / диспетчера (можливо, сценарій Bash ) тимчасово помістити CSS всередину "public" dir до того, як assets:install
буде виконано, тоді assets:install
, тоді assetic:dump
, а потім автоматичне видалення CSS з загальнодоступного каталогу після того, assetic:dump
як буде виконано. Це дало б змогу ТОЧНО поведінку, бажану у питанні.
Іншим (невідомим, якщо можливо) рішенням буде дослідження, чи "активи: установка" можуть брати лише "загальнодоступні" як джерело або також можуть брати "активи" як джерело для публікації. Це допоможе при встановленні з --symlink
опцією при розробці.
Крім того, якщо ми збираємося скриптувати видалення з "загальнодоступного" режиму, то необхідність їх зберігання в окремому каталозі ("активи") зникає. Вони можуть жити всередині "громадськості" в нашій системі контролю версій, оскільки їх буде розміщено після розгортання для загального користування. Це дозволяє також --symlink
використовувати.
АЛЕ ВСЕ, ОБЕРЕЖНО ЗАРАЗ: Оскільки оригіналів уже немає ( rm -Rf
), є лише два рішення, а не три. Діючий div "B" більше не працює, оскільки це був виклик активу (), якщо припустити, що він був оригінальним. Працюватиме лише "C" (складений).
Отже ... Є ТОЛЬКО ЗАКОННИЙ ПЕРЕМОЖНИК: Div "C" дозволяє ТОЧНО те, про що було задано в темі: Складати, поважати шлях до зображень і не піддавати оригіналу джерела публіці.
Переможець - C