कस्टम एक्सटेंशन कैसे लिखें?


143

क्योंकि मैं हाल ही में मुक्त और व्यावसायिक विस्तार के साथ बहुत सारे मुद्दों पर था, मैंने इस प्रश्न को पूछने और उन चरणों के साथ इसका जवाब देने का फैसला किया है जो मैं आमतौर पर एक्सटेंशन लिखते समय अनुसरण करता हूं। जवाब को संपादित करने या एक नया जोड़ने के लिए स्वतंत्र महसूस करें।
विस्तार या विषय स्थापित करते समय अधिकांश मामलों में मुझे उन सभी वातावरणों पर काम करने के लिए कुछ घंटे (कभी-कभी अधिक, कभी-कभी कम) खर्च करने पड़ते हैं:

  • dev: आमतौर पर localhostजहां प्रोजेक्ट सबफ़ोल्डर में होता है
  • Preprod & live

बड़े एक्सटेंशन प्रदाताओं के एक्सटेंशन के साथ भी ऐसा हुआ है (जब तक कि मैं वास्तव में पागल हो जाऊं और उनके नाम यहां जोड़ दूं ) कम से कम तब तक
बेकार रहना चाहिए, इसलिए मुख्य प्रश्न यह है..क्या मुझे गुणवत्ता सुनिश्चित करने के लिए एक्सटेंशन लिखने पर विचार करना चाहिए? कोड और तकनीकी और गैर-तकनीकी व्यक्ति के लिए इसका उपयोग करना आसान है और तकनीकी व्यक्ति के लिए इसे बदलना आसान है?


11
ऐसा लगता है कि बड़े विस्तार प्रदाताओं में से एक को यह सवाल पसंद नहीं आया और उसने इसे नकार दिया। :)
मेरियस

1
व्योमाइंड के साथ व्यक्तिगत रूप से, कोई संभावना नहीं है, लेकिन वे अपने कोड को एन्क्रिप्ट करते हैं और अभी भी "प्रीमियम पार्टनर" हैं :( (उदाहरण के लिए)
sv3n

जवाबों:


185

यहाँ मैं आमतौर पर क्या है:

  1. हमेशा साथ विकसित करना error_reporting
  2. हमेशा isDeveloperModeसेट के साथ विकसित करना true। बस SetEnv MAGE_IS_DEVELOPER_MODE 1अपनी httpd.confफ़ाइल में जोड़ें (या Nginx या कुछ और के लिए संबंधित फ़ाइल)
  3. यदि विस्तार एक कोर कार्यक्षमता से जुड़ा हुआ है, तो घोषणा फ़ाइल में निर्भरता जोड़ें <depends><Mage_Catalog /></depend>
  4. यदि मॉड्यूल सामुदायिक उपयोग के लिए है, communityतो कोड को सीधे कोड को संशोधित किए बिना कुछ वर्गों को ओवरराइड करने का मौका देने के लिए कोडपूल के रूप में उपयोग करें
  5. app/design/frontend/base/default सभी विषयों के लिए उन्हें उपलब्ध कराने के लिए अपने सामने की डिज़ाइन फ़ाइलों को रखें ।
  6. अपनी व्यवस्थापक डिज़ाइन फ़ाइलें रखें app/design/adminhtml/default/defaultऔर व्यवस्थापक विषय को न बदलें। मैं इसे अपने किसी मॉड्यूल में बदलना चाह सकता हूं।
  7. कंपनी के नाम के साथ अपने लेआउट फ़ाइल नाम और टेम्पलेट फ़ोल्डर नाम को उपसर्ग करना, उन्हें अलग करना आसान बनाता है। easylife_articles.xmlतथाapp/design/.../easylife_articles
  8. अपने स्थिर संसाधनों (जावास्क्रिप्ट, सीएसएस, और छवियों) को एक समान फ़ोल्डर में टेम्पलेट फ़ाइलों के रूप में रखें easylife_articles/images/doh.png
  9. एक्सटेंशन को अनइंस्टॉल करने के साथ एक सरल टेक्स्ट फ़ाइल संलग्न करें: क्या फ़ाइलों को हटाने की आवश्यकता है, क्या तालिकाओं को गिराए जाने की आवश्यकता है, तालिका से कौन सी कॉन्फ़िगरेशन सेटिंग्स को हटाने की आवश्यकता है core_config_data
  10. मॉडल, ब्लॉक या हेल्पर्स में सीधे प्रश्न न लिखें, उसके लिए संसाधन मॉडल का उपयोग करें।
  11. सीधे तालिका नामों का उपयोग करके क्वेरी न लिखें Select * from sales_flat_order where ...। का उपयोग करें Zend_Selectऔर तालिका नामों का उपयोग कर परिवर्तित करें ->getTable('sales/order')
  12. jsटेम्पलेट में फ़ाइलों को शामिल करने के लिए बेस यूआरएल का उपयोग करें । गलत है <script type="text/javascript" src="../js/some.js"></script>सही <script type="text/javascript" src="<?php echo Mage::getBaseUrl('js').'some.js'?>"></script>
  13. जब तक आवश्यक न हो तब तक कक्षाओं को फिर से न लिखें। पर्यवेक्षकों का उपयोग करें और यदि यह सहायक विधियों का उपयोग करना संभव नहीं है जो उस वर्ग के पैरामीटर और उदाहरण के रूप में प्राप्त करते हैं जिसे आप ओवरराइड करना चाहते थे। गलत : Mage_Catalog_Model_Productविधि जोड़ने के लिए ओवरराइड करें getProductArticles()सही है । अपने सहायक जोड़ में getProductArticles(Mage_Catalog_Model_Product $product)
  14. यदि आप कक्षाओं को ओवरराइड करते हैं, तो एक readme.txtफ़ाइल में उनकी सूची डालें
  15. अपने मॉड्यूल के व्यवस्थापक अनुभाग के लिए डिफ़ॉल्ट व्यवस्थापक पथ का उपयोग करें। गलत व्यवस्थापक URL articles/adminhtml_articles/indexसही व्यवस्थापक URL admin/articles/index
  16. अपने व्यवस्थापक अनुभागों के लिए ACL जोड़ें। मैं कुछ प्रशासकों की पहुँच को प्रतिबंधित करना चाहता हूँ।
  17. यदि आवश्यक न हो तो एक और जावास्क्रिप्ट फ्रेमवर्क (jQuery, MooTools, आदि) न जोड़ें। आप प्रोटोटाइप में कोड लिखें।
  18. आपको HTML W3C टेम्पलेट को वैध बनाते हैं (यह खुद की तरह ओसीडी डेवलपर्स के लिए है)।
  19. mediaफ़ोल्डर में चित्र न रखें। का उपयोग करें skinmedia फ़ोल्डर आमतौर पर versioned नहीं है और यह यह कठिन विभिन्न वातावरण के लिए वेबसाइट स्थानांतरित करने के लिए बनाता है।
  20. फ्लैट कैटलॉग के साथ अपने एक्सटेंशन का परीक्षण करें और बंद करें। विकास के समय को दोगुना नहीं करने के लिए, कैओस बंदर का उपयोग करें ।
  21. कैश onऔर कैश के साथ अपने एक्सटेंशन का परीक्षण करें off
  22. मॉड्यूल और वर्ग नामों में अपरकेस अक्षर का उपयोग करने से बचें। यदि ठीक से परीक्षण नहीं किया गया तो इससे विभिन्न OS पर समस्याएँ हो सकती हैं। यह एक सिफारिश है, 'नहीं' चाहिए।
  23. डेवलपर्स के लिए कार्यक्षमता को बदलना आसान बनाने के लिए अपने कोड में घटनाओं को डिस्पैच करें।
  24. उसी कोडिंग मानकों का पालन करें जो मैगेंटो आपके कोड का उपयोग करता है और टिप्पणी करता है।
  25. PHP शॉर्ट टैग ( <? $this->doSomething() ?>) का उपयोग न करें । पूर्ण टैग ( <?php $this->doSomething()?>) का उपयोग करें । इसके अलावा छोटे इको टैग का उपयोग न करें, फिर भी। ( <?="D'oh";?>)। उपयोग ( <?php echo "D'oh";?>)
  26. अपने ग्रंथों का उपयोग करके अपने ग्रंथों का अनुवाद करें $this->__और app/local/en_US/Easylife_Articles.csvकम से कम en_USभाषा में अपने ग्रंथों ( ) के साथ स्थानीय अनुवाद फ़ाइल जोड़ें । सभी वेबसाइट अंग्रेजी में नहीं बनी हैं और अनुवाद करने के लिए ग्रंथों की पहचान में समय लगता है।
  27. यदि आप कम से कम मूल समर्थन में एक विस्तार प्रस्ताव बेचते हैं। या आपके द्वारा प्राप्त समर्थन ई-मेल का कम से कम उत्तर दें।
  28. लाइसेंस सत्यापन के लिए अपने एक्सटेंशन के माध्यम से अपने सर्वर पर लगातार कॉल न करें। एक बार, इंस्टॉलेशन पर्याप्त से अधिक है (मुझे यह दृष्टिकोण पसंद नहीं है, लेकिन यह हर समय कॉल करने से बेहतर है)। ( इस सवाल से प्रेरित )
  29. लॉग सक्रिय के साथ विकसित करें और समय-समय पर var/log/system.logफ़ाइल पर एक नज़र डालें । यहां सूचीबद्ध त्रुटियों को डेवलपर मोड के साथ भी नहीं दिखाया गया है। यदि एक्सटेंशन चलाने के कुछ महीनों के बाद बड़ी लॉग फ़ाइल के साथ कम से कम एक त्रुटि होती है।
  30. यदि आपका एक्सटेंशन किसी तरह से चेकआउट प्रक्रिया या आदेशों को प्रभावित करता है, तो सुनिश्चित करें कि यह बहु-शिपिंग के साथ काम करता है, या यदि यह बहु-शिपिंग के साथ काम नहीं करना चाहिए, तो सुनिश्चित करें कि यह इसे प्रभावित नहीं करता है।
  31. डिफ़ॉल्ट व्यवस्थापक अधिसूचना बार (या फ़ीड URL) को प्रतिस्थापित न करें। अगर मुझे आपकी रुचि है तो मुझे आपके न्यूज़लेटर की सदस्यता लेनी होगी। मुझे देखते हैं कि Magento का क्या कहना है। यह मेरे लिए अधिक महत्वपूर्ण है।
  32. यदि आप Ioncube (या कुछ और) के साथ अपनी कोड फ़ाइलों को एन्क्रिप्ट करते हैं ... अच्छी तरह से ... मैं सिर्फ आपसे नफरत करता हूं और मुझे आशा है कि आपका व्यवसाय दिवालिया हो जाएगा

यही अब तक है। जैसे ही मैं कुछ और सोचूंगा, मैं और जोड़ दूंगा।


मैं आपसे सहमत हूं, यह निश्चित रूप से एक अच्छी शुरुआत है। निश्चित रूप से, आप यह भी समझेंगे कि सभी विभिन्न प्रकार के कॉन्फ़िगरेशन और मुद्दों को कवर करना हमेशा संभव नहीं होता है, कम से कम यह संभव को कम करेगा। ज्यादातर समस्या मैं अन्य एक्सटेंशन के साथ मिलती हूं या लोग मेरे साथ मिलते हैं, ओवरराइटिंग के कारण संघर्ष के कारण होते हैं।
सिल्वेन रे से

2
@ Marius, मुझे 1 से निश्चित रूप से। यह अधिकांश मामलों और परिदृश्य को कवर करता है जो हम विकास में सामना कर रहे हैं।
लियाकत

4
@ColinM। सबसे पहले, यह आपकी टिप्पणी के लिए एक सम्मान है। :)। मैं मानता हूं कि एक अंतर है, मैं उत्तर को संशोधित करूंगा, लेकिन मुझे अभी भी लगता है कि दोनों को बचा जाना चाहिए, कम से कम जब तक PHP 5.3 "नया PHP 4" नहीं बन जाता। मेरा मतलब है कि यह अभी भी बड़े पैमाने पर उपयोग किया जाता है।
मेरियस

4
@ मेरी, आपके अंक बहुत मददगार हैं। # 31 तक मैं प्रत्येक बिंदु पर गंभीरता से ध्यान केंद्रित कर रहा था, लेकिन # 32 पर मैंने एक जोर से हंसी फोड़ दी। +1 विशेष रूप से बिंदु # 32 के लिए
एमटीएम

1
If you encrypt your code files with Ioncube (or something else)...well...I just hate you and I hope your business goes bankruptमुझे भी ऐसा ही लगता है। कुछ कंपनियाँ हैं जो अपडेटेड संस्करण की पेशकश नहीं करती हैं, आपको उनके लिए भुगतान करना होगा, यह वास्तव में मेरे लिए निराशाजनक है और समझ में नहीं आता कि वे बार-बार उसी उत्पाद को क्यों बेचना चाहते हैं (पैसा कमाने के लिए? जाहिर है)। मैं अभी उनके उत्पाद नहीं खरीदता। आप जानते हैं कि मैं किसकी बात कर रहा हूं।
आदर्श खत्री

31

मैं मोडमैन का उपयोग करने का बहुत बड़ा प्रशंसक हूं ताकि मैं अपने विस्तार को नियंत्रित कर सकूं और कोर फाइलों और फोल्डर संरचना को अपरिवर्तित छोड़ सकूं । यह अलग-अलग इंस्टॉलेशन रन स्मूथ के लिए भी परीक्षण करता है।

ओह और एक बड़े पैमाने पर टिप हमेशा अपने पैक किए गए एक्सटेंशन को Magento कनेक्ट से अपलोड करने से पहले स्थानीय रूप से Magento की एक क्लीन इंस्टाल पर स्थापित करने की कोशिश करता है, मैंने पैकेज मैनेजर में कई बार फाइलों को मिस किया है।


3
'स्थानीय स्तर पर अपने पैक किए गए एक्सटेंशन को स्थापित करें' के बारे में अच्छा कॉल करें। मुझे लगता है कि यह श्रेणी में आता है: 'अपने देवता के विस्तार को ऊपर से नीचे की ओर परखें'।
मेरियस

मैं इससे पहले भी पकड़ा गया हूँ। सुनिश्चित करें कि आप एक साफ स्थापित पर पैकेज का परीक्षण करते हैं जो वही नहीं है जिस पर आपने इसे पैक किया था!
जोसेफ लीडी

22

एंड्रियास वॉन स्टडनिट्ज़ और डॉ। निकोलाई क्रैम्ब्रॉक ने मीट मैगेंटो डीई 2014 पर कोड गुणवत्ता पर एक अच्छी प्रस्तुति दी। वे सामान्य कोड गुणवत्ता और मैगेंटो-विशिष्ट कोड गुणवत्ता के बीच अंतर करते हैं। संक्षेप में, निम्नलिखित सामान्य नियम हैं:

  • संरचना तत्वों का उपयोग - कक्षाओं और विधियों की तरह - मध्य जब्त कक्षाओं में व्यवस्थित किया जाना चाहिए। संरचना के ये तत्व केवल तभी समझ में आते हैं जब उनका उपयोग संरचना के लिए किया जाता है। इसलिए उन्हें मध्यम आकार का होना चाहिए। यह वर्गों के लिए कोड की 100-200 लाइनों और तरीकों के लिए 3-20 लाइनों के कोड का उपयोग करने के लिए माना जाता है।
  • कोड "इंडेंट" होने के कारण "इफ़" या "के उपयोग के कारण। यदि 3 से अधिक इंडेंटेशन हैं, तो उन्हें संशोधित करना बेहतर है। बहुत से इंडेंटेशन कोड की जटिलता के लिए सबूत हैं और इसलिए, इससे बचा जाना चाहिए।
  • डेड कोड से बचा जाना चाहिए और हटा दिया जाना चाहिए। स्थैतिक विश्लेषण इसे खोजने में मदद करता है यदि कोई मौजूद है।

मैगेंटो-विशिष्ट नियम भी अधिक महत्वपूर्ण हैं:

  • मॉड्यूल स्वतंत्र रूप से काम करना चाहिए। उन्हें केवल अन्य मॉड्यूल पर निर्भरता और टेम्प्लेट पर कोई निर्भरता नहीं होनी चाहिए। एक समाधान टेम्पलेट फ़ाइलों के अनुकूलन के बजाय लेआउट-अपडेट (आधार / डिफ़ॉल्ट) का उपयोग करना है और एक मॉड्यूल जो टेम्पलेट के अतिरिक्त कार्यों को शामिल करता है।
  • मैगेंटो कोर-हैक और बाहरी मॉड्यूल के हैक में अपडेट की क्षमता को बनाए रखने से बचना चाहिए। एक बेहतर तरीका यह है कि इसके बजाय राइटर या ऑब्जर्वर का उपयोग किया जाए।
  • परिवर्तनों के लिए, डेटाबेस या व्यवस्थापक के प्रत्यक्ष परिवर्तनों के बजाय सेटअप स्क्रिप्ट का उपयोग करना बेहतर है। इनकी बदौलत बदलाव केवल आजीवन किया जाना चाहिए।

यहाँ कुछ और विवरण और प्रस्तुति का एक वीडियो है: http://www.code4business.de/code-quality-magento/


1
लेकिन अगर आपके पास आपके द्वारा पोस्ट किए गए लिंक का अंग्रेजी संस्करण है तो और भी बेहतर होगा।
मेरियस

इस प्रस्तुति का एक अंग्रेजी संस्करण जल्द ही लिखा जाने वाला है। मैं आपको चालू रखूंगा और अंग्रेजी संस्करण प्रकाशित होते ही मैं नई लिंक साझा करूंगा।
user3743859

प्रस्तुति का एक अंग्रेजी संस्करण अब ऑनलाइन है। इसका लिंक यहां दिया गया है: code4business.de/code-quality-magento
user3743859

है ना? यह अभी भी जर्मन में है। लेकिन मैं सिर्फ 2 सप्ताह पहले मीटमैगेंटरो में अंग्रेजी में इस प्रस्तुति में शामिल हुआ। उत्तम सामग्री।
मेरियस

18

यदि आप अपना एक्सटेंशन बेचते हैं या इसे दूसरों के साथ साझा करते हैं, तो कोड लिखने के बारे में सोचें जो मानव पठनीय है।

  1. विधि को बहुत जटिल न बनाएं
  2. अपने तरीकों से DOC ब्लॉक जोड़ें *
  3. $productIdsइसके बजाय उचित चर नामों का उपयोग करें$ids
  4. तरीकों के लिए भी यही public function myOnProductSaveMethod() {...}कहते हैं ... कुछ भी नहीं, लेकिन tryDisableInternetOnProductSave()संकेत देना चाहते हैं योजना बनाई है
  5. प्रकार संकेत का उपयोग करें जहां यह समझ में आता है someMethod(Varien_Data_Db_Collection $collection)
  6. जादू नंबर और तार से बचें **
  7. यदि आप पर्यवेक्षकों के लिए बेहतर पहुंच के लिए मॉडल सेट $_eventPrefixसंपत्ति (और $_eventObject) का उपयोग करते हैं
  8. यदि आप सिस्टम कॉन्फिगर फ़ील्ड जोड़ते हैं
    • में डिफ़ॉल्ट मान सेट करें config.xml
    • <validate>में फ़ील्ड्स में नोड्स जोड़ेंsystem.xml
    • करने के लिए ACL संसाधन जोड़ें adminhtml.xml
  9. व्यवस्थापक बैकएंड में बेकार / विज्ञापन प्रथम-स्तरीय मेनू प्रविष्टियों को न जोड़ें - न तो टॉपबार में और न ही कॉन्फ़िगरेशन अनुभागों में
  10. सभी नियंत्रक क्रियाओं के लिए ACL संसाधन जोड़ें (मालिश भी!)
  11. सुनिश्चित करें कि आपकी क्वेरीज़ DB तालिका उपसर्गों के साथ काम करती हैं
  12. के बारे में सोचें (नहीं) पिछड़ी हुई संगति (यह वास्तव में राय आधारित है)
    • Mysql4वर्गों का समर्थन नहीं करते
    • पदावनत विधियों का उपयोग न करें
  13. हर मामले में अपेक्षा के अनुसार अपने काम को सुनिश्चित करें - UnitTests (उदाहरण के लिए PhpUnit) जोड़ें
  14. डेविड शिष्टाचार के अलावा ... composer.jsonतैनाती को आसान बनाने के लिए भी जोड़ें
  15. चूंकि PHP5.6 EOL है, इसलिए PHP7 के लिए अपना कोड लिखें। declare(strict_types=1);अपने इन और आउटपुट प्रकारों का उपयोग करें और उन्हें परिभाषित करें
  16. Magento2: अपने कोड को स्थिर कोड विश्लेषण उपकरणों जैसे कि phpstan के साथ जांचेंयहां जादू के तरीकों के लिए समर्थन । (२.१ के साथ नवीनतम काम करता है, २.१ / २.२ से पहले - taht के लिए phpstan 0.8.5 की आवश्यकता होती है)

* DOC ब्लॉक:

यदि आप PSR2 मानक या PHPMD के लिए PHP_CodeSniffer के साथ अपने Magento-1 कोड की जाँच करते हैं, तो आप शायद इस पंक्तियों को जोड़ना चाहते हैं (जहाँ यह समझ में आता है) ...

  • कक्षाओं के लिए
    • @phpcs:disable PSR1.Classes.ClassDeclaration.MissingNamespace
    • @phpcs:disable PSR2.Classes.PropertyDeclaration.Underscore - विरासत में मिली संपत्ति
    • @phpcs:disable Squiz.Classes.ValidClassName.NotCamelCaps
    • @SuppressWarnings(PHPMD.CamelCaseClassName)
    • @SuppressWarnings(PHPMD.CamelCasePropertyName) - विरासत में मिली संपत्ति
  • तरीकों के लिए
    • @SuppressWarnings(PHPMD.CamelCaseMethodName) - विरासत में मिली विधियाँ
    • @SuppressWarnings(PHPMD.StaticAccess)- यदि आप Mage::या अन्य स्थिर कॉल का उपयोग करते हैं

** अक्सर इस्तमल होता है:

  • व्यवस्थापक स्टोर आईडी
    • 0 > Mage_Core_Model_App::ADMIN_STORE_ID
  • उत्पाद status
    • 1 > Mage_Catalog_Model_Product_Status::STATUS_ENABLED
    • 2> Mage_Catalog_Model_Product_Status::STATUS_DISABLED ( 0उम्मीद के मुताबिक नहीं )
  • उत्पाद type
    • simple > Mage_Catalog_Model_Product_Type::TYPE_SIMPLE
    • bundle > Mage_Catalog_Model_Product_Type::TYPE_BUNDLE
    • configurable > Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE
    • grouped > Mage_Catalog_Model_Product_Type::TYPE_GROUPED
    • virtual > Mage_Catalog_Model_Product_Type::TYPE_VIRTUAL
  • उत्पाद visibity
    • 1 > Mage_Catalog_Model_Product_Visibility::VISIBILITY_NOT_VISIBLE
    • 2 > Mage_Catalog_Model_Product_Visibility::VISIBILITY_IN_CATALOG
    • 3 > Mage_Catalog_Model_Product_Visibility::VISIBILITY_IN_SEARCH
    • 4 > Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH

SQL ऑर्डर ASCबनाम Zend_Db_Select::SQL_ASC (उदाहरण के लिए) के लिए भी

यह कहते हुए कि "यह निराशावादी कारण नहीं है कि यह कभी नहीं बदलेगा" ? उदाहरण के लिए के लिए इकाई आईडी catalog_productविशेषताओं से Magento 1.5 और 1.9 के बीच में कहीं बदल 10करने के लिए 4है, तो यह आपका एक्सटेंशन को तोड़ सकते थे:

$collection->addFieldToFilter('entity_type_id', 10)

इसके बजाय इसका उपयोग करना एक क्वेरी जोड़ता है, लेकिन आप सुरक्षित रहेंगे ...

$entityTypeId = Mage::getModel('eav/config')
    ->getEntityType(Mage_Catalog_Model_Product::ENTITY)
    ->getEntityTypeId();

$collection->addFieldToFilter('entity_type_id', $entityTypeId)

8

@ माउसिंग, कोडिंग मानकों के बारे में (आपकी सूची में बिंदु 24)।

मुझे EQP के साथ PHP_CodeSniffer का उपयोग करना पसंद है और इन मानकों को स्वचालित रूप से लागू करने के लिए ECG CS ।

का उपयोग करते हुए PHP_CodeSniffer आप की जगह जैसी चीजों भूल बारे में चिंता करने की जरूरत नहीं है array()के साथ [], उपयोग करने से बचेंis_null , अप्रयुक्त स्थानीय चर या phpdoc ब्लॉक के बिना भी एक विधि छोड़ दें।

PHP_CodeSniffer आपको हमेशा इसके बारे में बताएगा।


माना! संभावित हाउटो
sv3n

मुझे लगता है कि PHPStorm में (PHPStorm का उपयोग करने वालों के लिए) दोनों CS को कॉन्फ़िगर करने का कोई तरीका नहीं है, लेकिन आप अपने कोड में CS की जांच करने के लिए हमेशा टर्मिनल का उपयोग कर सकते हैं। इसके अलावा grumphp github.com/phpro/grumphp जैसे टूल भी हैं जो थोड़ी मदद करते हैं।
डायजेवाट्सन

यह आपकी मदद कर सकता है magento.stackexchange.com/questions/200022/…
प्रमोद खराडे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.