Symfony2 में, के बीच अंतर क्या है assetic:dumpऔर assets:install? इन आदेशों में से प्रत्येक का उपयोग किस परिदृश्य में किया जाना चाहिए, और किस क्रम में (यदि आदेश प्रासंगिक है)?
Symfony2 में, के बीच अंतर क्या है assetic:dumpऔर assets:install? इन आदेशों में से प्रत्येक का उपयोग किस परिदृश्य में किया जाना चाहिए, और किस क्रम में (यदि आदेश प्रासंगिक है)?
जवाबों:
मैंने वास्तव में इसके बारे में हाल ही में OroCRM के बारे में एक लेख में लिखा था, जो कि सिम्फनी 2 पर आधारित है। यदि आप कुछ संदर्भ चाहते हैं / विभिन्न आदेशों का क्यों, तो आपको यह दिलचस्प लग सकता है।
सिम्फनी एप्लिकेशन में फ्रंटएंड फाइल्स (जावास्क्रिप्ट, सीएसएस, इमेज आदि) के लिए दो अलग-अलग सिस्टम हैं। assets:installआदेश पहले आया था। यह कमांड एक के लिए एक आवेदन में सभी सिम्फनी बंडलों की खोज करेगा
Resources/public
फ़ोल्डर। तो मिल गया है, assets:installआदेश की प्रतिलिपि बनाने या से फाइल सिमलिंक जाएगा Resources/publicकरने के लिए web/public/bundle/[bundle-name]। यह वह जगह है जहां टहनी assetsफ़ंक्शन के साथ बनाए गए लिंक इन फ़ाइलों की तलाश करेंगे। यह
<script src="{{ asset('js/script.js') }}" type="text/javascript"></script>
बन जाता है
<script src="/bundles/[bundle-name]/js/script.js" type="text/javascript"></script>
यही सब assetsसिस्टम करता है। यह आपको बंडल के साथ अपनी फ्रंटएंड फ़ाइलों को संग्रहीत करने देता है।
asseticप्रणाली अलग है। इसके साथ assetic, आप फ़ाइलों को इस तरह से लिंक करते हैं।
{% javascripts '@AcmeFooBundle/Resources/public/js/foo.js' %}
<script type="text/javascript" src="{{ asset_url }}"></script>
{% endjavascripts %}
स्टाइलशीट और छवियों के लिए समान टैग हैं। सूचना जो asseticआपको किसी भी बंडल में फ़ाइलों से लिंक करने की अनुमति देती है। ( @AcmeFooBundle)। एसेटिक आपको वाइल्डकार्ड वाले फ़ोल्डर में कई फ़ाइलों से लिंक करने देगा।
{% javascripts '@AcmeFooBundle/Resources/public/js/*' %}
<script type="text/javascript" src="{{ asset_url }}"></script>
{% endjavascripts %}
के साथ एक और अंतर asseticउत्पन्न लिंक में है। में devपर्यावरण वे कुछ इस तरह दिखाई देंगे।
<script type="text/javascript" src="/app_dev.php/js/foo.js"></script>
<script type="text/javascript" src="/app_dev.php/js/bar.js"></script>
यही है, इन फ़ाइलों के लिए अनुरोध PHP फ्रंट कंट्रोलर ( app_dev.php) asseticबंडल में विशेष मार्गों सेटअप के माध्यम से चलेंगे । इसका मतलब है, जब आप devमोड में होते हैं, तो आपको कभी भी एसेट्स डंप करने की आवश्यकता नहीं होती है। वे स्वचालित रूप से शामिल हैं। यह आपको फ़ाइलों को फ़िल्टर लागू करने की भी अनुमति देता है। उदाहरण के लिए, निम्न cssrewriteफ़िल्टर को खींची गई फ़ाइलों पर लागू होता है।
{% stylesheets 'bundles/acme_foo/css/*' filter='cssrewrite' %}
<link rel="stylesheet" href="{{ asset_url }}" />
{% endstylesheets %}
यदि आप कभी भी अपने फ्रंटएंड एसेट्स के आउटपुट को प्रोग्रामेटिक रूप से बदलना चाहते हैं - asseticतो आप कस्टम ट्विग फिल्टर्स लिखकर ऐसा कर सकते हैं।
हालाँकि, यह प्रदर्शन गहन है। उत्पादन में, PHP फ्रंट कंट्रोलर फ़ाइल के माध्यम से प्रत्येक फ़ाइल को व्यक्तिगत रूप से लिंक करने के बजाय, उत्पन्न HTML इस तरह दिखेगा
<script type="text/javascript" src="/js/as5s31l.js"></script>
कहाँ as5s31l.jsसे आता है? वही assetic:dumpकाम करता है। यह सभी व्यक्तिगत जावास्क्रिप्ट / सीएसएस फ़ाइलों (फिल्टर को लागू करने के बाद) को जोड़ती है और उत्पादन के लिए एक अच्छी, स्थिर, उपलब्ध फाइल बनाता है।
जब तक कि परियोजना विशेष रूप से आपको अन्यथा नहीं बताती है, आपको हमेशा चलना चाहिए assets:installऔर assetic:dump, क्योंकि आप कभी नहीं जान पाएंगे कि आपके तीसरे पक्ष के बंडलों में से कौन सी कमांड का उपयोग करता है। मोड assetic:dumpमें एप्लिकेशन को परिनियोजित करने या देखने से पहले आपको केवल चलाने की आवश्यकता prodहै। आदेश अप्रासंगिक है।
किस सिस्टम के लिए आपके बंडल का उपयोग किया जाना चाहिए - यदि आपने ऊपर पढ़ा है और आप अनिश्चित हैं कि asseticआपके लिए क्या कर सकते हैं, उपयोग करें assets। ठीक हो जायेंगे।
<script type="text/javascript" src="app_dev.php/js/as5s31l.js"></script> था कि वास्तव में आपका मतलब क्या है <script type="text/javascript" src="app.php/js/as5s31l.js"></script>