मैं बहुत ही एक ही समस्या को लेकर आया हूं।
संक्षेप में:
- मूल सीएसएस को एक "आंतरिक" डायर (संसाधन / संपत्ति / सीएसएस / ए.के.एस) में रखने की इच्छा
- "सार्वजनिक" dir (संसाधन / सार्वजनिक / चित्र / devil.png) में छवियां प्राप्त करना
- उस सीवी को लेने से सीएसएस उस वेब / css / a.cs में पुन: जुड़ जाता है और इसे /web/bundles/mynicebundle/images/devil.png में छवि बनाता है
मैंने निम्नलिखित के सभी संभव (साने) संयोजनों के साथ एक परीक्षण किया है:
- @ नोटेशन, सापेक्ष संकेतन
- इसके बिना, crewrewrite के साथ पार्स करें
- सीएसएस छवि पृष्ठभूमि बनाम प्रत्यक्ष <img> टैग src = सीएसएस की तुलना में बहुत ही छवि के लिए
- सीएसएस ने एसिटिक के साथ पार्स किया और एसिटिक डायरेक्ट आउटपुट के साथ पार्स किए बिना भी
- और यह सब
Resources/public/css
सीएसएस और एक "निजी" निर्देशिका (के रूप में ) के साथ "सार्वजनिक डार" (के रूप में ) की कोशिश करके गुणा किया जाता है Resources/assets/css
।
इसने मुझे एक ही टहनी पर कुल 14 संयोजन दिए, और इस मार्ग से लॉन्च किया गया था
- "/App_dev.php/"
- "/App.php/"
- तथा "/"
इस प्रकार 14 x 3 = 42 परीक्षण दे रहा है।
इसके अतिरिक्त, यह सब एक उपनिर्देशिका में काम करने के लिए परीक्षण किया गया है, इसलिए पूर्ण URL देकर मूर्ख बनाने का कोई तरीका नहीं है क्योंकि वे बस काम नहीं करेंगे।
परीक्षण दो अनाम छवियां थीं और फिर सीएसएस से सार्वजनिक फ़ोल्डर से निर्मित सी के लिए 'ए' से 'एफ' नाम दिया गया और आंतरिक पथ से निर्मित लोगों के लिए 'जी' से 'एल' नाम दिया गया।
मैंने निम्नलिखित देखा:
14 में से केवल 3 परीक्षण तीन URL पर पर्याप्त रूप से दिखाए गए थे। और कोई भी "आंतरिक" फ़ोल्डर (संसाधन / संपत्ति) से नहीं था। यह आवश्यक था कि सीएसएस पब्लिक पब्लिश हो और फिर वहां से एसिटिक एफएटी के साथ निर्माण किया जाए।
ये परिणाम हैं:
परिणाम /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>
कंटेनर:
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');
}
"निर्देशिका" संरचना है:
निर्देशिकाएँ
यह सब इसलिए आया, क्योंकि मैं नहीं चाहता था कि व्यक्तिगत मूल फाइलें जनता के सामने उजागर हों, खासकर अगर मैं "कम" फिल्टर या "सैस" या समान के साथ खेलना चाहता था ... मैं नहीं चाहता था कि मेरे "मूल" प्रकाशित हों, केवल संकलित एक।
लेकिन अच्छी खबरें हैं । यदि आप सार्वजनिक निर्देशिकाओं में "स्पेयर सीएसएस" नहीं रखना चाहते हैं ... उन्हें स्थापित न करें --symlink
, लेकिन वास्तव में एक प्रतिलिपि बना रहे हैं। एक बार "एसेटिक" ने यौगिक सीएसएस का निर्माण किया है, और आप फाइल सिस्टम से मूल सीएसएस को हटा सकते हैं, और छवियों को छोड़ सकते हैं:
संकलन की प्रक्रिया
नोट मैं यह --env=prod
पर्यावरण के लिए करता हूं ।
बस कुछ अंतिम विचार:
यह वांछित व्यवहार Git या Mercurial में "सार्वजनिक" निर्देशिका में चित्र और "संपत्ति" निर्देशिका में "css" होने से प्राप्त किया जा सकता है । कि निर्देशिकाओं में दिखाए अनुसार उन्हें "सार्वजनिक" करने के बजाय, अपने इंस्टॉलर / तैनातीकर्ता (शायद एक बैश स्क्रिप्ट) की तुलना में "सार्वजनिक" के बजाय "संपत्ति" में रहने वाले, ए, बी, सी ... की कल्पना करें। "सार्वजनिक" डीआईआर के अंदर अस्थायी रूप से सीएसएस को लगाने से पहले assets:install
निष्पादित किया जाता है assets:install
, फिर assetic:dump
, और फिर सीएसएस को हटाने के बाद सार्वजनिक निर्देशिका से स्वचालित रूप से assetic:dump
निष्पादित किया जाता है। यह प्रश्न में वांछित व्यवहार को प्राप्त करेगा।
एक और (अज्ञात यदि संभव हो तो) समाधान यह पता लगाने के लिए होगा कि "संपत्ति: स्थापित" केवल स्रोत के रूप में "सार्वजनिक" ले सकता है या प्रकाशित करने के लिए स्रोत के रूप में "संपत्ति" भी ले सकता है। --symlink
विकसित होने पर विकल्प के साथ स्थापित करने में मदद मिलेगी ।
इसके अतिरिक्त, यदि हम "पब्लिक" डायर से हटाने की स्क्रिप्ट करने जा रहे हैं, तो, उन्हें एक अलग निर्देशिका ("संपत्ति") में संग्रहीत करने की आवश्यकता गायब हो जाती है। वे हमारे संस्करण-नियंत्रण प्रणाली में "सार्वजनिक" के अंदर रह सकते हैं क्योंकि जनता को वहां तैनात किया जाएगा। यह --symlink
उपयोग के लिए भी अनुमति देता है ।
लेकिन, अभी नहीं: क्योंकि अब मूल वहाँ नहीं हैं ( rm -Rf
), वहाँ केवल दो समाधान हैं, तीन नहीं। काम करने वाला div "B" अब काम नहीं करता है क्योंकि यह एक परिसंपत्ति थी () यह मानते हुए कि मूल संपत्ति थी। केवल "सी" (संकलित एक) काम करेगा।
तो ... केवल एक अंतिम विजेता है: Div "C" वास्तव में इस विषय में जो पूछा गया था, वह अनुमति देता है: संकलित होने के लिए, छवियों के लिए पथ का सम्मान करें और मूल स्रोत को जनता के सामने उजागर न करें।
विजेता C है