Ben de aynı problemle karşılaştım.
Kısacası:
- "Dahili" bir dizinde orijinal CSS'ye sahip olmaya istekli (Kaynaklar / varlıklar / css / a.css)
- Resimleri "genel" dizinde bulundurmaya istekli (Kaynaklar / public / images / devil.png)
- Bu dalın bu CSS'yi alıp web / css / a.css'ye yeniden derlemesini ve /web/bundles/mynicebundle/images/devil.png içindeki görüntüyü göstermesini istemek
Aşağıdakilerin TÜM olası (mantıklı) kombinasyonları ile bir test yaptım:
- @ gösterim, göreli gösterim
- Onsuz cssrewrite ile ayrıştırın
- CSS resim arka planı - doğrudan <img> etiketi src = CSS ile tamamen aynı resme
- CSS, asetik ile ve ayrıca asetik doğrudan çıktıyla ayrıştırmadan ayrıştırıldı
- Ve tüm bunlar
Resources/public/css
CSS ile bir "genel dir" (as ) ve "özel" bir dizin (as Resources/assets/css
) deneyerek çarpılır .
Bu bana aynı dal üzerinde toplam 14 kombinasyon verdi ve bu rota,
- "/app_dev.php/"
- "/app.php/"
- ve "/"
böylece 14 x 3 = 42 test verir.
Ek olarak, tüm bunlar bir alt dizinde çalışarak test edilmiştir, bu nedenle mutlak URL'ler vererek kandırmanın bir yolu yoktur, çünkü bunlar işe yaramayacaktır.
Testler, iki adsız görüntü ve ardından ortak klasörden oluşturulan CSS için "a" ile "f" arasında ve dahili yoldan oluşturulanlar için "g -" l "arasında adlandırılmış div'lerdi.
Aşağıdakileri gözlemledim:
14 testin sadece 3'ü üç URL'de yeterli şekilde gösterildi. Ve HİÇBİRİ "dahili" klasördendi (Kaynaklar / varlıklar). Yedek CSS PUBLIC'e sahip olmak ve ardından oradan asetic ile inşa etmek bir ön şarttı.
Sonuçlar şunlardır:
Sonuç /app_dev.php/ ile başlatıldı
Sonuç /app.php/ ile başlatıldı
Sonuç / ile başlatıldı
Yani ... YALNIZCA - İkinci görüntü - Div B - Div C izin verilen sözdizimleridir.
İşte TWIG kodu var:
<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;
}
Ve a.css, b.css, c.css, vb: hepsi aynı, sadece rengi ve CSS seçiciyi değiştirerek.
.a
{
background: red url('../images/devil.png');
}
"Dizinler" yapısı şu şekildedir:
Dizinler
Bütün bunlar geldi, çünkü tek tek orijinal dosyaların halka açık olmasını istemiyordum, özellikle "daha az" filtre veya "sass" veya benzeri bir şekilde oynamak istersem ... "Orijinallerimin" yayınlanmasını istemedim, sadece bir tane derledi.
Ama iyi haberler var . Herkese açık dizinlerde "yedek CSS" nin olmasını istemiyorsanız ... bunları ile değil --symlink
, gerçekten bir kopya oluşturarak kurun . "Assetic" bileşik CSS'yi oluşturduktan sonra, orijinal CSS'yi dosya sisteminden SİLİN ve görüntüleri bırakabilirsiniz:
Derleme süreci
Not Bunu --env=prod
çevre için yapıyorum .
Sadece son birkaç düşünce:
Bu istenen davranış, görüntülerin Git veya Mercurial'de "genel" dizininde ve "varlıklar" dizininde "css" de bulundurulmasıyla gerçekleştirilebilir. Yani, dizinlerde gösterildiği gibi "genel" olarak yer almaları yerine, a, b, c ... nin yükleyiciniz / dağıtıcınız (muhtemelen bir Bash betiği) yerine "genel" yerine "varlıklar" içinde bulunduğunu hayal edin. CSS'yi geçici olarak "public" dizininin içine koymak assets:install
, çalıştırılmadan önce , ardından assets:install
ve ardından assetic:dump
, çalıştırıldıktan sonra CSS'nin genel dizinden kaldırılmasını otomatikleştirmek assetic:dump
. Bu tam olarak soruda istenen davranışı sağlayacaktır.
Başka bir (mümkünse bilinmeyen) çözüm, "assets: install" öğesinin yalnızca kaynak olarak "genel" olup olmadığını veya yayınlamak için "varlıkları" kaynak olarak alıp alamayacağını araştırmak olacaktır. Bu --symlink
, geliştirme sırasında seçenekle birlikte kurulduğunda yardımcı olur .
Ek olarak, kaldırmayı "genel" dizininden yapacaksak, bunları ayrı bir dizinde ("varlıklar") saklama ihtiyacı ortadan kalkar. Sürüm kontrol sistemimizde "kamuya açık" içinde yaşayabilirler çünkü halka dağıtıldıktan sonra bırakılacaktır. Bu aynı zamanda --symlink
kullanıma da izin verir .
ANCAK HER ZAMAN ŞİMDİ DİKKAT : Artık orijinaller artık orada olmadığından ( rm -Rf
), üç değil, yalnızca iki çözüm var. Çalışan div "B", orijinal varlığın olduğu varsayılarak bir varlık () çağrısı olduğu için artık çalışmıyor. Yalnızca "C" (derlenmiş olan) çalışacaktır.
Öyleyse ... SADECE SON BİR KAZANAN vardır: Div "C" tam olarak konuyla ilgili sorulan şeye izin verir: Derlenmek için görüntülere giden yola saygı gösterin ve orijinal kaynağı kamuya açıklamayın.
Kazanan C