Natknąłem się na ten sam problem.
W skrócie:
- Chcesz mieć oryginalny CSS w „wewnętrznym” katalogu (Zasoby / aktywa / css / a.css)
- Chcesz mieć obrazy w katalogu „public” (Resources / public / images / devil.png)
- Chcąc, aby gałązka wzięła ten CSS, przekompilowała go do web / css / a.css i sprawiła, że wskazywał obraz w /web/bundles/mynicebundle/images/devil.png
Wykonałem test z WSZYSTKIMI możliwymi (rozsądnymi) kombinacjami następujących elementów:
- @notacja, notacja względna
- Parse z cssrewrite, bez tego
- Tło obrazu CSS a bezpośredni tag <img> src = do tego samego obrazu co CSS
- CSS parsowany z asetycznym, a także bez parsowania z bezpośrednim wyjściem assetic
- A wszystko to pomnożone przez wypróbowanie
Resources/public/css
„katalogu publicznego” (as ) z CSS i katalogu „prywatnego” (as Resources/assets/css
).
Dało mi to w sumie 14 kombinacji na tej samej gałązce, a ta trasa została wypuszczona z
- „/app_dev.php/”
- „/app.php/”
- i "/"
dając w ten sposób 14 x 3 = 42 testy.
Ponadto wszystko to zostało przetestowane pod kątem działania w podkatalogu, więc nie ma sposobu, aby oszukać, podając bezwzględne adresy URL, ponieważ po prostu by nie działały.
Testy obejmowały dwa nienazwane obrazy, a następnie elementy div nazwane od „a” do „f” dla CSS zbudowanego z folderu publicznego i nazwane od „g do„ l ”dla plików zbudowanych ze ścieżki wewnętrznej.
Zauważyłem, co następuje:
Tylko 3 z 14 testów zostały poprawnie wyświetlone na trzech adresach URL. ŻADNE nie pochodziło z folderu „wewnętrznego” (zasoby / zasoby). Warunkiem wstępnym było posiadanie wolnego CSS PUBLIC, a następnie zbudowanie go z wykorzystaniem Assetic FROM.
Oto wyniki:
Wynik uruchomiony z /app_dev.php/
Wynik uruchomiony z /app.php/
Wynik uruchomiony z /
Więc ... TYLKO - Drugi obraz - Div B - Div C to dozwolone składnie.
Tutaj jest kod 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>
Plik 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;
}
Oraz a.css, b.css, c.css itd .: wszystkie identyczne, wystarczy zmienić kolor i selektor CSS.
.a
{
background: red url('../images/devil.png');
}
Struktura „katalogów” jest następująca:
Katalogi
Wszystko to przyszło, ponieważ nie chciałem, aby poszczególne oryginalne pliki były ujawniane publicznie, szczególnie gdybym chciał grać z filtrem „less”, „sass” lub podobnym… Nie chciałem, aby moje „oryginały” były publikowane, tylko skompilowany.
Ale są dobre wieści . Jeśli nie chcesz mieć „wolnego CSS” w publicznych katalogach ... zainstaluj je nie z --symlink
, ale naprawdę wykonując kopię. Gdy „assetic” zbuduje złożony CSS, możesz USUNĄĆ oryginalny CSS z systemu plików i pozostawić obrazy:
Proces kompilacji
Uwaga Robię to dla --env=prod
środowiska.
Tylko kilka myśli końcowych:
To pożądane zachowanie można osiągnąć, umieszczając obrazy w katalogu „public” w Git lub Mercurial, a „css” w katalogu „asset”. Oznacza to, że zamiast umieszczać je „publicznie”, jak pokazano w katalogach, wyobraź sobie a, b, c ... rezydujące w „aktywach” zamiast „publiczne”, niż mieć swój instalator / wdrażający (prawdopodobnie skrypt Bash ) umieszczenie CSS tymczasowo w katalogu „public”, zanim assets:install
zostanie wykonane, assets:install
następnie assetic:dump
, a następnie automatyzacja usuwania CSS z katalogu publicznego po assetic:dump
wykonaniu. Dałoby to DOKŁADNIE zachowanie pożądane w pytaniu.
Innym (nieznanym, jeśli to możliwe) rozwiązaniem byłoby zbadanie, czy „zasoby: instalacja” może przyjmować tylko „publiczne” jako źródło, czy też „zasoby” jako źródło do publikacji. Pomogłoby to w przypadku zainstalowania z --symlink
opcją podczas programowania.
Dodatkowo, jeśli zamierzamy skrypty usuwania z katalogu „publicznego”, to znika potrzeba przechowywania ich w osobnym katalogu („asset”). Mogą żyć jako „publiczne” w naszym systemie kontroli wersji, ponieważ zostaną upuszczone po wdrożeniu do publicznego. Pozwala to również na --symlink
użytkowanie.
ALE ZAWSZE, OSTROŻNIE TERAZ: Ponieważ obecnie nie ma już oryginałów ( rm -Rf
), są tylko dwa rozwiązania, a nie trzy. Działający element „B” już nie działa, ponieważ było wywołaniem asset () przy założeniu, że był oryginalny zasób. Tylko "C" (skompilowana) będzie działać.
Więc ... jest TYLKO KOŃCOWY ZWYCIĘZCA: Div "C" pozwala DOKŁADNIE o to, o co proszono w temacie: Kompilować, szanować ścieżkę do obrazów i nie ujawniać publicznie oryginalnego źródła.
Zwycięzcą jest C