मैगेंटो मार्केटप्लेस तकनीकी समीक्षा रिपोर्ट द्वारा उठाए गए चेतावनियों / त्रुटियों को कैसे ठीक करें?


25

नए Magento मार्केटप्लेस के साथ, एक जमा किया गया एक्सटेंशन कई मान्यता प्राप्त राज्यों से होकर जाता है ताकि बाज़ार के माध्यम से अनुमोदित और उपलब्ध हो सके।

उनमें से एक तकनीकी समीक्षा है, जिसमें से आप निम्नलिखित की तरह एक तकनीकी रिपोर्ट प्राप्त कर सकते हैं:

मार्केटप्लेस तकनीकी रिपोर्ट

जैसा कि आप देख सकते हैं, 200+ चेतावनियाँ थोड़े से मुझे नरक से डराती हैं, क्या डॉक्स में उपलब्ध सूची के अलावा हर चेतावनी को ठीक करने में मदद करने के लिए कोई संसाधन है: http://docs.magento.com/marketplace/user_guide/extensions समीक्षा-कोड-सत्यापन ।.html ?


मुझे ऐसा लगता है कि किसी को यहाँ PHP CodeSniffer का उपयोग करने का सुझाव देना चाहिए और जो कुछ भी मानक है वह Magento 2 का उपयोग करता है ... PSR-2? निश्चित रूप से !?
रॉबी एवेरिल

यह PSR-1 और PSR-2 दोनों का उपयोग करता है।
मनीष

@raphael, pls इसे देखें, magento.stackexchange.com/questions/192506/…
abhishek

@raphael pls इसे देखें: magento.stackexchange.com/questions/71399/…
abhishek

जवाबों:


31

रिपोर्ट के माध्यम से जाने के एक घंटे के बाद मैं निम्नलिखित सूची के साथ आया, यह मेरे विचार से सभी के लिए उपयोगी हो सकता है।

जैसे ही मुझे और चेतावनियाँ / त्रुटियाँ मिलेंगी, मैं इसे अपडेट रखने की कोशिश करूँगा:

चेतावनी

80 से अधिक वर्णों की रेखा; एक्स अक्षर शामिल हैं

या

लाइन 100 वर्णों की अधिकतम सीमा से अधिक है; एक्स अक्षर शामिल हैं

उन लोगों में से एक हैं जिन्हें मैंने सबसे अधिक देखा है, वे स्वयं व्याख्यात्मक हैं, एक साफ और पठनीय कोड रखने के लिए कोडिंग लाइनों को छोटा रखना एक अच्छा अभ्यास है।

फ़ंक्शन कॉल में अल्पविराम के बाद कोई स्थान नहीं मिला

आपने एक फ़ंक्शन कहा है जो पैरामीटर प्राप्त करता है और अल्पविराम के बाद एक स्थान नहीं जोड़ता है। उदाहरण: strrchr($bla,".")होना चाहिएstrrchr($bla, ".")

अपेक्षित "" जबकि (...) {\ n \ "; पाया \ "जबकि (...) \ n {\ n \"

अपेक्षित \ "फॉर्च्यूनर (...) {\ n \"; पाया \ "foreach (...) \ n {\ n \"

अपेक्षित \ "अगर (...) {\ n \"; पाया \ "अगर (...) \ n {\ n \"

अपेक्षित \ "} और {\ n \"; पाया \ "} \ n और {\ n \"

इसका मतलब है कि आप उन PHP कथनों के उद्घाटन ब्रैकेट से पहले एक पंक्ति में लौट आए हैं।

एक / अन्य विवरण के साथ एक खराब सिंटैक्स का उदाहरण:

if (true)
{
}
else
{
}

होना चाहिए

if (true) {
} else {
}

समापन कोष्ठक और मल्टी-लाइन फ़ंक्शन घोषणा का प्रारंभिक ब्रेस एक ही पंक्ति पर होना चाहिए

ज्यादातर समय, यह कंस्ट्रक्टर में होता है जहां आप कुछ इस तरह की घोषणा करते हैं:

public function __construct(
    ProductFactory $productFactory,
    Test $test
)
{
}

जबकि यह होना चाहिए:

public function __construct(
    ProductFactory $productFactory,
    Test $test
) {
}

पंक्ति वर्ण का अंत अमान्य है; अपेक्षित \ "\ n \" लेकिन मिला \ "r \ n \"

फ़ाइल की शुरुआत में ज्यादातर समय होता है, यह उस तरह से होता है जिस तरह से आपका आईडीई रिटर्न चरित्र को एन्कोड करता है।

वेरिएबल \ "your_variable \" वैध ऊंट कैप्स प्रारूप में नहीं है

प्रत्येक चर को ऊंट कैप प्रारूप का उपयोग करना चाहिए, इसलिए $your_variableहोना चाहिए$yourVariable

चर \ "वन 2 थ्री \" में नंबर होते हैं लेकिन यह हतोत्साहित किया जाता है

अपने चर में संख्याओं के उपयोग से बचें

इनलाइन नियंत्रण संरचनाओं की अनुमति नहीं है

आपको इनलाइन नियंत्रण संरचनाओं का उपयोग नहीं करना चाहिए जैसे:

else $test = true;

आपको उपयोग करना चाहिए:

else {
    $test = true;
}

परिभाषा के बाद एक वर्ग का ओपनिंग ब्रेस लाइन पर होना चाहिए

कक्षा घोषित करते समय आपने एक पंक्ति लौटा दी है:

class Test
{

आपको एक ही लाइन पर शुरुआती ब्रेस रखना चाहिए:

class Test {

निजी सदस्य चर "yourVariable \" में एक प्रमुख अंडरस्कोर होना चाहिए

संरक्षित सदस्य चर \ "yourVariable \" में एक प्रमुख अंडरस्कोर होना चाहिए

आपको अपने संरक्षित और निजी सदस्य चर में एक प्रमुख अंडरस्कोर जोड़ना चाहिए: $_yourVariable

उन दो के विपरीत, यदि आप अपने सार्वजनिक चर में एक अंडरस्कोर जोड़ते हैं तो आप प्राप्त कर सकते हैं:

सार्वजनिक सदस्य चर \ _ \ _ आपके परिवर्तनशील \ _ में एक प्रमुख अंडरस्कोर नहीं होना चाहिए।

विधि पैरामीटर $ bla का उपयोग कभी नहीं किया जाता है

आपने एक विधि के लिए एक पैरामीटर पास किया है लेकिन आप इसका उपयोग कभी नहीं करते हैं।

मल्टी-लाइन फ़ंक्शन घोषणा सही ढंग से इंडेंट नहीं; उम्मीद की 8 रिक्त स्थान लेकिन एक्स पाया

आपने अपने फ़ंक्शन घोषणा मापदंडों में बहुत अधिक इंडेंटेशन जोड़ दिया है:

public function __construct(ProductRepository $productRepository,
                            ListsInterface $listsInterface,
                            Data $helper
) {

होना चाहिए:

public function __construct(ProductRepository $productRepository,
    ListsInterface $listsInterface,
    Data $helper
) {

संभव बेकार विधि का पता चला है

आप संशोधनों को शामिल किए बिना एक विधि को ओवरराइड कर रहे हैं, उदाहरण:

public function __construct(Context $context) {
    parent::__construct($context);
}

मॉडल एलएसडी विधि लोड () लूप में पाया गया

आप load()लूप के अंदर की विधि का उपयोग कर रहे हैं जिसे अनुशंसित नहीं किया गया है और इसे टाला जाना चाहिए।

सबसे अधिक संभावना है कि आपका कोड इस तरह दिखता है:

foreach(...) {
    $model->load();
}

यदि आप किसी मॉडल को लूप में लोड कर रहे हैं तो यह प्रदर्शन के मामले में वास्तव में बहुत खराब है। यदि आपको केवल कुछ विशेषताओं को पुनः प्राप्त करने की आवश्यकता है, तो आपको इसके बजाय संग्रह का उपयोग करना चाहिए।

समारोह की चक्रीय जटिलता (एक्स) एक्ससीड्स 10; फ़ंक्शन को फिर से सक्रिय करने पर विचार करें

यदि आप साइक्लोमैटिक जटिलता से परिचित नहीं हैं, तो मेरा सुझाव है कि आप इस पोस्ट को पढ़ें: https : // pd depend.org/documentation/software-metrics/cyclomatic-complexity.html । यह चेतावनी मूल रूप से इसका मतलब है कि आपके फ़ंक्शन में बहुत अधिक लूप और स्थितियां हैं।

Magento 2 में प्रत्यक्ष वस्तु तात्कालिकता हतोत्साहित है

यह इस तथ्य के कारण होता है कि आप सीधे कक्षा को कॉल करके किसी ऑब्जेक्ट को तत्काल भेज रहे हैं, उदाहरण के लिए:

new \Zend_Filter_LocalizedToNormalized

आपको निर्भरता इंजेक्शन या एक अंतिम उपाय का उपयोग करना चाहिए, ऑब्जेक्ट मैनेजर।

टिप्पणियाँ TODO कार्य का उल्लेख करती हैं

आपकी एक टिप्पणी में निम्नलिखित @TODOध्वज शामिल हैं।

IF स्टेटमेंट से बचें जो हमेशा सही या गलत होते हैं

आपने एक ऐसी स्थिति बनाई है जो हमेशा सच या गलत प्रतीत होती है।

उदाहरण के लिए:

$variable = "6";
...
// More code that doesn't change $variable
...
if ($variable)

त्रुटियाँ

\ "वर्ग \" वर्ग के लिए नाम स्थान निर्दिष्ट नहीं है।

आपको use Path\To\Class;अपनी कक्षा की शुरुआत में कथन याद आ रहा है ।


1
यदि मुझे यह ठीक से समझ में आ गया है, तो ये सिफारिशें सभी एम 2 एक्सटेंशन (यहां तक ​​कि एक व्यक्तिगत उपयोग के लिए) को संदर्भित करती हैं?
सियारि उचुकलेबौ

@SiarheyUchukhlebau हां यह तकनीकी रिपोर्ट है जो आपको एक बार
मैगेंटो

1
You should keep the opening brace on the same line:क्या यह दूसरा रास्ता नहीं है? वैसे शानदार पोस्ट
क्लॉडिउ क्रेगना

@ClaudiuCreanga मुझे लगता है कि आप सही हैं मुझे डबल चेक करने दो;)
डिजिटल पियानोवाद पर राफेल

क्या एक एक्सटेंशन के माध्यम से धक्का देना संभव है जिसमें 10k से अधिक चेतावनी संदेश है? या वे हर चीज को अस्वीकार कर देते हैं जिसमें चेतावनी है?
रोलैंड सूस

9

MEQP1 या MEQP2 नियमों के साथ कोडस्निफर का उपयोग करना (आपके Magento के संस्करण पर निर्भर करता है) आपको Magento के नियम के बारे में एक विचार देगा: https://github.com/magento/marketplace-eqp/tree/master/

यह नियम और मार्केटप्लेस की सबमिट प्रक्रिया पर चलने वाला हमेशा पूरी तरह से सिंक में नहीं होता है (हालांकि, यह आदर्श है), इसलिए आपको कोडनिफ़र त्रुटियों के लिए अस्वीकार कर दिया जा सकता है, भले ही यह गीथब पर नवीनतम संस्करण पास हो।

अधिक सामान्य "गंभीरता -10" त्रुटियों में से कुछ (केवल त्रुटियों को आपके एक्सटेंशन को अस्वीकार कर दिया जाएगा), और उनकी सूचीबद्ध सिफारिशों में शामिल हैं:

PHP फ़ाइल के अंत में एक समापन टैग की अनुमति नहीं है

अनुशंसा: PHP समापन टैग निकालें।

कॉल-टाइम पास-बाय-संदर्भ कॉल निषिद्ध हैं

सिफारिश: PHP 5 में संदर्भों पर प्रलेखन पढ़ें और अपने कोड को रिफलेक्टर करें। संदर्भ: http://php.net/manual/en/language.references.pass.php

$ _ENV सुपरग्लोबल का प्रत्यक्ष उपयोग पाया गया।

$ _GET सुपरग्लोबल का प्रत्यक्ष उपयोग पाया गया।

$ _POST सुपरग्लोबल का प्रत्यक्ष उपयोग पाया गया।

$ _REQUEST सुपरग्लोबल का प्रत्यक्ष उपयोग पाया गया।

$ _SESSION सुपरग्लोबल का प्रत्यक्ष उपयोग पाया गया।

$ GLOBALS सुपरग्लोबल का प्रत्यक्ष उपयोग पाया गया।

अनुशंसा: कुकी, सत्र या अनुरोध डेटा प्राप्त करने के लिए संबंधित आवरण वस्तुओं का उपयोग करें।

फंक्शन सेट_कंपनी_क्वाट्स_रंटाइम () को हटा दिया गया है

सिफारिश: पदावनत किए गए कार्यों का उपयोग नहीं किया जाना चाहिए क्योंकि उन्हें भविष्य के संस्करण से किसी भी समय हटाया जा सकता है। [संभवतः सभी पदावनतियों के लिए एक सामान्य त्रुटि]

समसामयिक ऑपरेटर === का उपयोग स्ट्रैप फंक्शन के रिटर्न मान के परीक्षण के लिए नहीं किया जाता है

पहचानकर्ता ऑपरेटर === का उपयोग स्ट्रिप्प फंक्शन के रिटर्न वैल्यू के परीक्षण के लिए नहीं किया जाता है

अनुशंसा: इस फ़ंक्शन के रिटर्न मान के परीक्षण के लिए === ऑपरेटर का उपयोग करें।

बैक कोट स्ट्रिंग निरंतर का गलत उपयोग। वापस उद्धरण हमेशा तार के अंदर होना चाहिए।

सिफारिश: [कोई अलग सिफारिश नहीं। मुझे लगता है कि यह एक बैककौट के माध्यम से निष्पादन को रोकने के लिए है।]

[ClassName] वर्ग में _isAllowed () ACL विधि गुम है।

अनुशंसा: विशेष रूप से विशेषाधिकारों की स्थापना, प्रबंधन और हैंडलिंग का प्रबंधन करें। ACL संसाधन को प्रत्येक adminhtml नियंत्रक और _isAllowed () पद्धति के लिए adminhtml.xml फ़ाइल में परिभाषित किया जाना चाहिए।

[ExceptionClassName] वर्ग के लिए नाम स्थान निर्दिष्ट नहीं है।

अनुशंसा: अपवाद नामस्थान निर्दिष्ट करें।

PHP सिंटैक्स त्रुटि: कॉल-टाइम पास-बाय-संदर्भ हटा दिया गया है

सिफारिश: सिंटैक्स त्रुटि को ठीक करें। [यह ऊपर वाला साथ देता है। मैं कल्पना करता हूं कि अन्य सभी PHP सिंटैक्स त्रुटियों के लिए एक समान सामान्य त्रुटि दी गई है]

संभव Magento 2 डिजाइन का उल्लंघन। विशिष्ट मैगनेटो 1 निर्माण का पता लगाया।

अनुशंसा: [यह बिना किसी सिफारिश के आता है, लेकिन कोड का वर्णन करता है जहां वर्ग उपयोग जैसे Mage :: blah या Mage_blah_blah :: blah का पता लगाया जाता है - ये ऐसे वर्ग हैं जो केवल Magento 1 में मौजूद हैं और Magento में काम नहीं करेंगे। 2. एक अच्छा विचार यह है कि Mage(\b|_)M1 usages के लिए पूर्व-जाँच करने के लिए regex के लिए अपने M2 के विस्तार को खोजें।]

संसाधन PHP 7 में एक आरक्षित शब्द है।

सिफारिश: [कोई अलग सिफारिश नहीं। बस कुछ और करने के लिए शब्द का नाम बदलकर काम करना चाहिए। मुझे लगता है कि यह त्रुटि सभी आरक्षित शब्दों के लिए मौजूद है।]

खुलने वाला PHP टैग फ़ाइल में पहला कंटेंट होना चाहिए

अनुशंसा: PHP ओपनिंग टैग से पहले सभी वर्णों को हटा दें।

डाई लैंग्वेज निर्माण का उपयोग हतोत्साहित किया जाता है।

निकास भाषा निर्माण का उपयोग हतोत्साहित किया जाता है।

अनुशंसा: setBody () प्रतिक्रिया ऑब्जेक्ट विधि का उपयोग किया जाना चाहिए।

इको भाषा निर्माण का उपयोग हतोत्साहित किया जाता है।

प्रिंट भाषा निर्माण का उपयोग हतोत्साहित किया जाता है।

अनुशंसा: कक्षाओं में गूंज, हेडर आदि के उपयोग से बचने के लिए विस्तार की वास्तुकला को बदला जाना चाहिए, प्रतिक्रिया वस्तु के सेटबॉडी () विधि का उपयोग करने पर विचार करें।

निष्कासन () का उपयोग हतोत्साहित किया जाता है

सिफारिश: eval () का उपयोग करने से बचें।


इन त्रुटियों के विपरीत, जो आपके विस्तार को अस्वीकार कर देती हैं, चेतावनी को वर्तमान में केवल एक शिष्टाचार के रूप में सूचीबद्ध किया गया है, ताकि आपके एक्सटेंशन के कोड को बेहतर बनाया जा सके। आपको चेतावनियों के लिए तकनीकी समीक्षा से अस्वीकार नहीं किया जाएगा, हालांकि कई हैं।

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


तकनीकी समीक्षा से अस्वीकृति के कुछ कारण वर्तमान में ऑनलाइन रिपोर्ट पर दिखाई नहीं देते हैं, और केवल ईमेल में दिए गए हैं।

कॉपी-पेस्ट उल्लंघन और मैलवेयर का पता लगाने जैसी चीजें केवल ईमेल में दिखाए गए संदेश होंगी जो आपको बताएंगे कि आपका एक्सटेंशन स्वीकार नहीं किया गया है, इसलिए ईमेल को ध्यान से पढ़ें

इन ईमेलों का एक संग्रह वर्तमान में डेवलपर पोर्टल से दिखाई नहीं देता है, इसलिए यदि आप उन्हें बिना पढ़े हटा देते हैं, या उन्हें रद्दी करने के लिए फाइल करते हैं, तो वे चले गए हैं।

मैगेंटो के स्तर 1 के समीक्षकों ने कभी-कभी इस ईमेल में अतिरिक्त जानकारी डाली, या तो सिर्फ सहायक चीजें जो उन्होंने सोचा कि आप इसके बारे में जानना चाहते हैं, जैसे "यह सरणी कुंजी 'विच्छेद' शायद 'सर्वर' होना चाहिए," या उनके अस्वीकृति और सुझावों के लिए तर्क इसे शीघ्रता से हल करने के तरीके पर, जैसे "आपने पूरी Magento की कोर फ़ाइल को कॉपी किया है और बस classpath को बदला है: आप इसे इसके बजाय वर्ग वरीयता सेटिंग के साथ बदल सकते हैं।" सार्वजनिक कार्य: आप इसके लिए प्लग इन का उपयोग कर सकते हैं। "

यदि आप इन्हें नहीं पढ़ते हैं, और सिर्फ कोड्सनिफर रिपोर्ट को देखते हैं, तो आप गलत समस्याओं को ठीक करने की कोशिश कर सकते हैं।


ध्यान दें कि unescaped output detectedसंदेश @escapeNotVerifiedया @noEscapeटिप्पणियों का उपयोग करके चकमा नहीं दिया जाना चाहिए । यह संभवतः Magento के भविष्य के संस्करणों में अस्वीकृत हो जाएगा। इसके बजाय, निम्न में से एक का उपयोग करें:

  • एकल उद्धरण में कोई स्थिर स्ट्रिंग।
  • दोहरे उद्धरण चिह्नों में एक स्थिर स्ट्रिंग, जिसमें कोई इनलाइन चर नहीं हैं।
  • [अनुशंसित] एक मूल्य से भागने तरीकों में से एक के साथ भाग \Magento\Framework\View\Element\AbstractBlock( escapeHtml(), escapeUrl(), escapeQuote(), escapeXssInUrl())।
  • एक संख्यात्मक प्रकार का मान (कम से कम बूल और इंट, शायद अन्य?)
  • कोई भी विधि नाम में "html" शब्द के साथ कॉल करती है, जैसे printBannerHtml()। यह एक दुरुपयोग मत करो! सुनिश्चित करें कि आपकी blahHtml()विधि वास्तव में सभी चर को सही ढंग से बचती है।

मेरा एक्सटेंशन प्रदर्शन चेतावनी लेकिन उपरोक्त में से कोई भी संभव नहीं है क्योंकि चेतावनी के कारण मेरा एक्सटेंशन अस्वीकार कर दिया गया है?
संजय गोहिल

मैंने इसे कुछ समय पहले पोस्ट किया था - तब से नए जोड़े जा सकते हैं। जब आप अपने डेवलपर खाते में प्रवेश करते हैं, तो एक्सटेंशन पर क्लिक करें, और त्रुटि लॉग देखें, जो संदेश आप देख रहे हैं, और वे किस स्तर पर त्रुटियां हैं? यदि वे गंभीरता 10 नहीं हैं, तो आपको किसी अन्य कारण से अस्वीकार कर दिया जा सकता है। अस्वीकृति ईमेल क्या कहता है?
डेवी मोर्गन

6

त्रुटि:

अनपेक्षित आउटपुट का पता चला

.Phtml फ़ाइल में त्रुटि

<ul class="form-list" id="payment_form_<?php echo $code ?>" style="display:none;">

आप चिल्लाते हैं:

<ul class="form-list" id="payment_form_<?php /* @noEscape */ echo $code ?>" style="display:none;">

के लिए टेम्पलेट XSS सुरक्षा देखें Http://devdocs.magento.com/guides/v2.0/frontend-dev-guide/templates/template-security.html#escape-functions-for-templates के


यह असाधारण रूप से खराब प्रोग्रामिंग शैली है। कृपया इस तरह से @noEscapeऔर @escapeNotValidatedआदेशों का दुरुपयोग न करें : यदि आप करते हैं, तो वे पदावनत होने की संभावना रखते हैं और फिर MEQI सिस्टम द्वारा अस्वीकृत हो जाते हैं। अपने डेटा से बचने के बेहतर तरीकों की एक विस्तृत सरणी के लिए मेरे जवाब के नीचे देखें।
डेवी मॉर्गन

1
@ दीवारी मॉर्गन: आपकी बहुमूल्य जानकारी के लिए धन्यवाद।
शंकर_
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.