Ответ 1
Я столкнулся с очень-той же проблемой.
Короче:
- Желание иметь оригинальный CSS во внутреннем каталоге (Resources/assets/css/a.css)
- Желание иметь изображения в "общедоступном" каталоге (Ресурсы/общедоступные/images/devil.png)
- Считая, что веточка берет этот CSS, перекомпилирует его в web/css/a.css и заставляет его указывать образ в /web/bundles/mynicebundle/images/devil.png
Я провел тест со всеми возможными (нормальными) комбинациями:
- @notation, относительная нотация
- Разбор с cssrewrite, без него
- Фон изображения CSS vs direct <img> tag src= к тому же изображению, что и CSS
- CSS анализируется с помощью ассемблера, а также без синтаксического анализа с асептическим прямым выходом
- И все это умножается на попытку "public dir" (как
Resources/public/css
) с CSS и "private" (какResources/assets/css
).
Это дало мне в общей сложности 14 комбинаций на одной ветке, и этот маршрут был запущен из
- "/app_dev.php/"
- "/app.php/"
- и "/"
давая 14 x 3 = 42 теста.
Кроме того, все это было протестировано, работая в подкаталоге, поэтому нет способа обмануть, указав абсолютные URL-адреса, потому что они просто не будут работать.
Тестирование состояло из двух неназванных изображений, а затем от имени 'a' до 'f' для CSS, созданного из общей папки, и названного 'g to' l 'для тех, которые были построены из внутреннего пути.
Я заметил следующее:
Только 3 из 14 тестов были показаны адекватно по трем URL-адресам. И NONE был из "внутренней" папки (Ресурсы/активы). Это было предпосылкой для того, чтобы иметь запасную CSS PUBLIC, а затем строить с помощью assetic FROM there.
Вот результаты:
-
Результат, запущенный с помощью /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
, но действительно создайте копию. После того, как "assetic" построил составной CSS, и вы можете УДАЛИТЬ оригинальный CSS из файловой системы и оставить изображения:
Процесс компиляции
Примечание. Я делаю это для среды --env=prod
.
Несколько последних мыслей:
-
Это желаемое поведение может быть достигнуто за счет наличия изображений в "общедоступном" каталоге в Git или Mercurial и "css" в каталоге "assets". То есть вместо того, чтобы иметь их в "общедоступных", как показано в каталогах, представьте, что a, b, c... находятся в "активах" вместо "public", чем у вашего установщика/развертывателя (возможно, Bash script), чтобы временно помещать CSS в "общедоступный" каталог перед
assets:install
, затемassets:install
, затемassetic:dump
, а затем автоматизация удаления CSS из общего каталога после выполненияassetic:dump
. Это должно было бы ТОЧНО выполнить поведение, требуемое в вопросе. -
Другое (неизвестное, если возможно) решение будет состоять в том, чтобы исследовать, может ли "assets: install" использовать только "public" в качестве источника или также может использовать "активы" в качестве источника для публикации. Это поможет при установке с опцией
--symlink
при разработке. -
Кроме того, если мы перейдем к script удалению из "общедоступного" каталога, то необходимость сохранения их в отдельном каталоге ( "активы" ) исчезнет. Они могут жить внутри "общественности" в нашей системе контроля версий, поскольку они будут удалены при развертывании для общественности. Это также позволяет использовать
--symlink
.
НО ВПЕРВЫЕ, ВНИМАНИЕ СЕЙЧАС: Поскольку теперь оригиналов больше нет (rm -Rf
), есть только два решения, а не три. Рабочий div "B" больше не работает, так как это был вызов asset(), предполагающий, что был исходный актив. Будет работать только "C" (скомпилированный).
Итак, есть ТОЛЬКО ОКОНЧАТЕЛЬНЫЙ ПОБЕДИТЕЛЬ: Div "C" позволяет ТОЧНО, что он задал в теме: компилировать, уважать путь к изображениям и не публиковать исходный источник для публики.
Победителем является C