Saya telah menemukan masalah yang sama.
Pendeknya:
- Bersedia memiliki CSS asli di direktori "internal" (Resources / assets / css / a.css)
- Bersedia untuk memiliki gambar di direktori "publik" (Resources / public / images / devil.png)
- Bersedia ranting itu mengambil CSS itu, mengkompilasinya kembali ke web / css / a.css dan membuatnya mengarahkan gambar ke /web/bundles/mynicebundle/images/devil.png
Saya telah menguji SEMUA kemungkinan kombinasi (waras) berikut ini:
- @notasi, notasi relatif
- Parse dengan cssrewrite, tanpa itu
- Latar belakang gambar CSS vs <img> tag src = langsung ke gambar yang sama dengan CSS
- CSS diurai dengan assetic dan juga tanpa parsing dengan output langsung assetic
- Dan semua ini dikalikan dengan mencoba "public dir" (as
Resources/public/css
) dengan CSS dan direktori "private" (as Resources/assets/css
).
Ini memberi saya total 14 kombinasi pada ranting yang sama, dan rute ini diluncurkan dari
- "/app_dev.php/"
- "/app.php/"
- dan "/"
sehingga memberikan 14 x 3 = 42 tes.
Selain itu, semua ini telah diuji bekerja di subdirektori, jadi tidak ada cara untuk menipu dengan memberikan URL absolut karena mereka tidak akan berfungsi.
Tesnya adalah dua gambar tanpa nama dan kemudian div dinamai dari 'a' hingga 'f' untuk CSS yang dibangun DARI folder publik dan diberi nama 'g ke' l 'untuk yang dibangun dari jalur internal.
Saya mengamati yang berikut:
Hanya 3 dari 14 pengujian yang ditampilkan secara memadai pada tiga URL. Dan TIDAK ADA dari folder "internal" (Sumber Daya / aset). Itu adalah prasyarat untuk memiliki cadangan CSS PUBLIK dan kemudian membangun dengan aset dari sana.
Inilah hasilnya:
Hasil diluncurkan dengan /app_dev.php/
Hasil diluncurkan dengan /app.php/
Hasil diluncurkan dengan /
Jadi ... HANYA - Gambar kedua - Div B - Div C adalah sintaks yang diizinkan.
Di sini ada kode 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;
}
Dan a.css, b.css, c.css, dll: semuanya identik, hanya mengubah warna dan pemilih CSS.
.a
{
background: red url('../images/devil.png');
}
Struktur "direktori" adalah:
Direktori
Semua ini datang, karena saya tidak ingin file asli individu diekspos ke publik, khususnya jika saya ingin bermain dengan filter "kurang" atau "sass" atau serupa ... Saya tidak ingin "aslinya" dipublikasikan, hanya menyusun satu.
Tapi ada kabar baik . Jika Anda tidak ingin memiliki "CSS cadangan" di direktori publik ... jangan instal dengan --symlink
, tetapi benar-benar membuat salinan. Setelah "assetic" membuat CSS gabungan, dan Anda dapat MENGHAPUS CSS asli dari sistem file, dan meninggalkan gambar:
Proses kompilasi
Catatan Saya melakukan ini untuk --env=prod
lingkungan.
Hanya beberapa pemikiran terakhir:
Perilaku yang diinginkan ini dapat dicapai dengan memiliki gambar di direktori "publik" di Git atau Mercurial dan "css" di direktori "aset". Artinya, alih-alih menyimpannya di "publik" seperti yang ditunjukkan di direktori, bayangkan a, b, c ... berada di "aset" alih-alih "publik", daripada memiliki penginstal / penerapan Anda (mungkin skrip Bash ) untuk meletakkan CSS sementara di dalam direktori "public" sebelum assets:install
dijalankan, lalu assets:install
, kemudian assetic:dump
, dan kemudian secara otomatis menghapus CSS dari direktori publik setelah assetic:dump
dijalankan. Ini akan mencapai PERSIS perilaku yang diinginkan dalam pertanyaan itu.
Solusi lain (tidak diketahui jika memungkinkan) adalah menyelidiki apakah "assets: install" hanya dapat mengambil "publik" sebagai sumber atau juga dapat mengambil "aset" sebagai sumber untuk dipublikasikan. Itu akan membantu saat dipasang dengan --symlink
opsi saat mengembangkan.
Selain itu, jika kita akan membuat skrip penghapusan dari direktori "public", maka kebutuhan untuk menyimpannya dalam direktori terpisah ("assets") menghilang. Mereka dapat hidup di dalam "publik" dalam sistem kontrol versi kami karena akan dibuang saat diterapkan ke publik. Ini memungkinkan juga untuk --symlink
penggunaan.
NAMUN, HATI-HATI SEKARANG: Karena sekarang yang asli sudah tidak ada lagi ( rm -Rf
), hanya ada dua solusi, bukan tiga. Div yang berfungsi "B" tidak berfungsi lagi karena itu adalah panggilan aset () dengan asumsi ada aset asli. Hanya "C" (yang telah dikompilasi) yang akan bekerja.
Jadi ... HANYA ada PEMENANG AKHIR: Div "C" memungkinkan PERSIS apa yang diminta dalam topik: Untuk dikompilasi, hormati jalur ke gambar dan jangan paparkan sumber aslinya ke publik.
Pemenangnya adalah C