私は非常に同じ問題に遭遇しました。
要するに:
- 「内部」ディレクトリに元のCSSを入れても構わないと思っています(Resources / asset / css / a.css)
- 「public」ディレクトリ(Resources / public / images / devil.png)に画像を入れてもよい
- その小枝がそのCSSを取得し、それをweb / css / a.cssに再コンパイルして、/ web / bundles / mynicebundle / images/devil.png内の画像を指すようにします。
私は次のすべての可能な(正気の)組み合わせでテストを行いました:
- @ notation、相対表記
- cssrewriteを使用して、それを使用せずに解析します
- CSS画像の背景と直接<img>タグsrc=をCSSとまったく同じ画像に
- アセットを使用して解析されたCSSと、アセットの直接出力を使用して解析されたCSS
Resources/public/css
そして、CSSと「private」ディレクトリ(as )で「publicdir」(as)を試すことで、これがすべて倍増しResources/assets/css
ます。
これにより、同じ小枝で合計14の組み合わせが得られ、このルートは
- "/app_dev.php/"
- 「/app.php/」
- と "/"
したがって、14 x 3=42のテストが行われます。
さらに、これらはすべてサブディレクトリで機能することがテストされているため、絶対URLを指定しても機能しないため、だまされる方法はありません。
テストは、名前のない2つのイメージと、パブリックフォルダーからビルドされたCSSの場合は「a」から「f」まで、内部パスからビルドされたものの場合は「g」から「l」までの名前のdivでした。
私は次のことを観察しました:
14のテストのうち3つだけが3つのURLで適切に表示されました。そして、NONEは「内部」フォルダ(リソース/アセット)からのものでした。予備のCSSPUBLICを用意し、そこにアセットFROMを使用してビルドすることが前提条件でした。
結果は次のとおりです。
/app_dev.php/で起動された結果

/app.php/で起動された結果

/で起動された結果

つまり...のみ-2番目の画像-DivB-DivCが許可された構文です。
ここに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;
}
そして、a.css、b.css、c.cssなど:すべて同じで、色とCSSセレクターを変更するだけです。
.a
{
background: red url('../images/devil.png');
}
「ディレクトリ」構造は次のとおりです。
ディレクトリ

これはすべて、個々のオリジナルファイルを公開したくないためです。特に、「less」フィルターや「sass」などでプレイしたい場合は、「オリジナル」を公開したくありませんでした。コンパイルされたもの。
しかし、良いニュースがあります。パブリックディレクトリに「スペアCSS」を含めたくない場合は、を使用せずにインストールしてください--symlink
。実際にコピーを作成してください。「assetic」が複合CSSを構築したら、ファイルシステムから元のCSSを削除して、画像を残すことができます。
コンパイルプロセス

--env=prod
私は環境のためにこれを行うことに注意してください。
ほんの少しの最終的な考え:
この望ましい動作は、 GitまたはMercurialの「public」ディレクトリに画像を配置し、「assets」ディレクトリに「css」を配置することで実現できます。つまり、ディレクトリに表示されているように「パブリック」に配置する代わりに、インストーラー/デプロイヤー(おそらくBashスクリプト)を使用するよりも、「パブリック」ではなく「アセット」に存在するa、b、c...を想像してください。assets:install
実行前にCSSを一時的に「public」ディレクトリ内に配置し、assets:install
次に、、そして実行assetic:dump
後にパブリックディレクトリからのCSSの削除を自動化しますassetic:dump
。これにより、質問で必要な動作が正確に実現されます。
別の(可能であれば不明な)解決策は、「assets:install」がソースとして「public」のみを取得できるか、または公開するソースとして「assets」を取得できるかどうかを調査することです。--symlink
これは、開発時にオプションを付けてインストールすると役立ちます。
さらに、「public」ディレクトリからの削除をスクリプト化する場合、それらを別のディレクトリ(「assets」)に保存する必要はなくなります。それらは、パブリックにデプロイされるとドロップされるため、バージョン管理システムの「パブリック」内に存在できます。これにより、--symlink
使用も可能になります。
しかし、とにかく、今注意してください:現在、オリジナルはもう存在しないので(rm -Rf
)、3つではなく2つの解決策しかありません。元のアセットがあったと仮定すると、asset()呼び出しであったため、作業div"B"は機能しなくなりました。「C」(コンパイルされたもの)のみが機能します。
だから...最終的な勝者だけがあります:Div "C"は、トピックで求められたものを正確に許可します:コンパイルするには、画像へのパスを尊重し、元のソースを公開しないでください。
勝者はCです
