Wie behebe ich Warnungen / Fehler, die durch den technischen Überprüfungsbericht des Magento Marketplace ausgelöst wurden?

magento.stackexchange https://magento.stackexchange.com/questions/111085

Frage

Mit dem neuen Magento Marketplace durchläuft eine eingereichte Erweiterung mehrere Validierungszustände, um genehmigt und über den Marketplace verfügbar zu sein.

Eine davon ist die technische Überprüfung, von der Sie einen technischen Bericht wie den folgenden erhalten können:

Marketplace Technical Report

Wie Sie sehen können, haben mir mehr als 200 Warnungen höllisch Angst gemacht. Gibt es eine Ressource, die Ihnen hilft, jede Warnung zu beheben, abgesehen von der Liste in den Dokumenten: http://docs.magento.com/marketplace/user_guide/extensions/review-code-validation.html?

War es hilfreich?

Lösung

Nach einer Stunde Durchsicht des Berichts kam ich auf die folgende Liste, die für alle hilfreich sein könnte, denke ich.

Ich werde versuchen, es auf dem neuesten Stand zu halten, sobald ich weitere Warnungen / Fehler finde:

Unwetterwarnungen

Zeile überschreitet 80 Zeichen;enthält X Zeichen

Oder

Zeile überschreitet Maximalgrenze von 100 Zeichen;enthält X Zeichen

Diese sind die, die ich am meisten gesehen habe, sie sind selbsterklärend, es ist eine gute Praxis, die Codierungszeilen klein zu halten, um einen sauberen und lesbaren Code zu erhalten.

Kein Leerzeichen nach Komma im Funktionsaufruf gefunden

Sie haben eine Funktion aufgerufen, die Parameter empfängt und nach dem Komma kein Leerzeichen hinzugefügt hat.Beispiel: strrchr($bla,".") sollte sein strrchr($bla, ".")

Erwartet \"während (...) {\und\";gefunden \"während (...) { \"

Erwartet \"für jeden (...) {\und\";gefunden \"für jeden (...) { \"

Erwartet \"if (...) {\und\";gefunden \"if (...) { \"

Erwartet \"} else { \";gefunden \"} sonst { \"

Das bedeutet, dass Sie eine Zeile vor der öffnenden Klammer dieser PHP-Anweisungen zurückgegeben haben.

Beispiel für eine fehlerhafte Syntax mit einer if / else-Anweisung:

if (true)
{
}
else
{
}

Sollte sein

if (true) {
} else {
}

Die schließende Klammer und die öffnende Klammer einer mehrzeiligen Funktionsdeklaration müssen sich in derselben Zeile befinden

Meistens passiert es im Konstruktor, wo Sie so etwas deklarieren:

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

Während es sein sollte:

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

Zeilenendezeichen ist ungültig;erwartet \ "\ n \", aber gefunden \ "\ r \ n \"

Passiert meistens am Anfang der Datei, es wird durch die Art und Weise verursacht, wie Ihre IDE das Rückgabezeichen codiert.

Variable \ "Ihre Variable \" hat kein gültiges Camel Caps-Format

Jede Variable muss das Camel Caps-Format verwenden, also $your_variable sollte sein $yourVariable

Variable \"one2Three \" enthält Zahlen, aber davon wird abgeraten

Vermeiden Sie die Verwendung von Zahlen in Ihren Variablen

Inline-Kontrollstrukturen sind nicht zulässig

Sie sollten keine Inline-Kontrollstrukturen wie z:

else $test = true;

Sie sollten verwenden:

else {
    $test = true;
}

Öffnende Klammer einer Klasse muss in der Zeile nach der Definition stehen

Sie haben beim Deklarieren einer Klasse eine Zeile zurückgegeben:

class Test
{

Sie sollten die öffnende Klammer in derselben Zeile halten:

class Test {

Die private Mitgliedsvariable \"Ihre Variable \" muss einen führenden Unterstrich enthalten

Geschützte Mitgliedsvariable \"Ihre Variable \" muss einen führenden Unterstrich enthalten

Sie sollten Ihren geschützten und privaten Mitgliedsvariablen einen führenden Unterstrich hinzufügen: $_yourVariable

Im Gegensatz zu diesen beiden können Sie, wenn Sie Ihrer öffentlichen Variablen einen Unterstrich hinzufügen, Folgendes erhalten:

Die öffentliche Membervariable \"_yourVariable\" darf keinen führenden Unterstrich enthalten.

Der Methodenparameter $ bla wird niemals verwendet

Sie haben einen Parameter an eine Methode übergeben, aber Sie verwenden ihn nie.

Mehrzeilige Funktionsdeklaration nicht korrekt eingerückt;erwartete 8 Leerzeichen, aber X gefunden

Sie haben Ihren Funktionsdeklarationsparametern zu viele Einrückungen hinzugefügt:

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

Sollte sein:

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

Mögliches nutzloses Überschreiben der Methode erkannt

Sie überschreiben eine Methode, ohne Änderungen hinzuzufügen, Beispiel:

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

Modell-LSD-Methode load () in Schleife erkannt

Sie verwenden die load() methode innerhalb einer Schleife, die nicht empfohlen wird und vermieden werden muss.

Höchstwahrscheinlich sieht Ihr Code so aus:

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

Wenn Sie ein Modell in eine Schleife laden, ist es in Bezug auf die Leistung in der Tat ziemlich schlecht.Wenn Sie nur wenige Attribute abrufen müssen, sollten Sie stattdessen Sammlungen verwenden.

Zyklomatische Komplexität der Funktion (X) überschreitet 10;erwägen Sie, die Funktion umzugestalten

Wenn Sie mit zyklomatischer Komplexität nicht vertraut sind, empfehle ich Ihnen, diesen Beitrag zu lesen: https://pdepend.org/documentation/software-metrics/cyclomatic-complexity.html .Diese Warnung bedeutet im Grunde, dass Ihre Funktion zu viele Schleifen und Bedingungen enthält.

Direkte Objektinstanziierung wird in Magento 2 nicht empfohlen

Dies liegt daran, dass Sie ein Objekt direkt instanziieren, indem Sie beispielsweise die Klasse aufrufen:

new \Zend_Filter_LocalizedToNormalized

Sie sollten die Abhängigkeitsinjektion oder einen letzten Ausweg, den Objektmanager, verwenden.

Kommentare beziehen sich auf eine TODO-Aufgabe

Einer Ihrer Kommentare enthält Folgendes @TODO Flagge.

Vermeiden Sie IF-Aussagen, die immer wahr oder falsch sind

Sie haben eine Bedingung erstellt, die immer wahr oder falsch zu sein scheint.

Beispielsweise:

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

Fehlermeldung

Der Namespace für die Klasse \"Class \" ist nicht angegeben.

Sie vermissen die use Path\To\Class; aussage zu Beginn Ihrer Klasse.

Andere Tipps

Die Verwendung von Codesniffer mit dem MEQP1- oder MEQP2-Regelsatz (abhängig von Ihrer Magento-Version) gibt Ihnen eine Vorstellung vom Magento-Regelsatz: https://github.com/magento/marketplace-eqp/tree/master/

Dieser Regelsatz und der Regelsatz, der auf dem Übermittlungsprozess von Marketplace ausgeführt wird, sind NICHT immer perfekt synchron (obwohl dies natürlich das Ideal ist), sodass Sie möglicherweise wegen Codesniffer-Fehlern abgelehnt werden, selbst wenn die neueste Version auf Github übergeben wird.

Einige der häufigeren "Schweregrad-10" -Fehler (die einzigen Fehler, für die Ihre Erweiterung abgelehnt wird) und die aufgeführten Empfehlungen umfassen:

Ein schließendes Tag am Ende einer PHP-Datei ist nicht zulässig

Empfehlung:Entfernen Sie das schließende PHP-Tag.

Anrufzeit-Pass-by-Reference-Anrufe sind verboten

Empfehlung:Lesen Sie die Dokumentation zu Referenzen in PHP 5 und überarbeiten Sie Ihren Code.Verweis: http://php.net/manual/en/language.references.pass.php

Direkte Verwendung von $ _ENV Superglobal erkannt.

Direkte Verwendung von $_GET Superglobal erkannt.

Direkte Verwendung von $ _POST Superglobal erkannt.

Direkte Verwendung von $_REQUEST Superglobal erkannt.

Direkte Verwendung von $_SESSION Superglobal erkannt.

Direkte Verwendung von $ GLOBALS Superglobal erkannt.

Empfehlung:Verwenden Sie entsprechende Wrapper-Objekte, um Cookie-, Sitzungs- oder Anforderungsdaten abzurufen.

Die Funktion set_magic_quotes_runtime () ist veraltet

Empfehlung:Veraltete Funktionen sollten nicht verwendet werden, da sie jederzeit aus einer zukünftigen Version entfernt werden können.[Wahrscheinlich ein generischer Fehler für alle deprecations]

Identischer Operator === wird nicht zum Testen des Rückgabewerts der Funktion strpos verwendet

Identischer Operator === wird nicht zum Testen des Rückgabewerts der stripos-Funktion verwendet

Empfehlung:Verwenden Sie den Operator ===, um den Rückgabewert dieser Funktion zu testen.

Falsche Verwendung der String-Konstante für Anführungszeichen.Hintere Anführungszeichen sollten immer innerhalb von Zeichenfolgen stehen.

Empfehlung:[keine gesonderte Empfehlung.Ich stelle mir vor, dass dies dazu dient, Exec durch Rückzitate zu verhindern.]

Die ACL-Methode _isAllowed() in der Klasse [className] fehlt.

Empfehlung:Verwalten Sie die Einstellung, Verwaltung und Handhabung von Berechtigungen sehr sorgfältig.ACL-Ressource sollte in adminhtml definiert werden.xml-Datei für jeden adminhtml-Controller und _isAllowed () -Methode sollte implementiert werden.

Der Namespace für die Klasse [ExceptionClassName] ist nicht angegeben.

Empfehlung:Geben Sie den Ausnahme-Namespace an.

PHP-Syntaxfehler:Anrufzeit-Pass-by-Referenz wurde entfernt

Empfehlung:Syntaxfehler behoben.[Dieser begleitet das Obige.Ich stelle mir vor, dass ein ähnlicher generischer Fehler für alle anderen PHP-Syntaxfehler angegeben wird]

Möglicher Verstoß gegen das Magento 2-Design.Typische Magento 1-Konstruktion erkannt.

Empfehlung:[Dies enthält keine Empfehlung, beschreibt jedoch Code, in dem Klassennutzungen wie Mage :: blah oder Mage_blah_blah :: blah erkannt werden - dies sind Klassen, die nur in Magento 1 existieren und in Magento 2 nicht funktionieren.Eine gute Idee ist, Ihre M2-Erweiterung nach dem regulären Ausdruck zu durchsuchen Mage(\b|_) zur Vorabprüfung auf M1-Verwendungen.]

ressource ist ein reserviertes Wort in PHP 7.

Empfehlung:[Keine gesonderte Empfehlung.Einfach das Wort in etwas anderes umzubenennen sollte funktionieren.Ich stelle mir vor, dass dieser Fehler für alle reservierten Wörter existiert.]

Das öffnende PHP-Tag muss der erste Inhalt in der Datei sein

Empfehlung:Entfernen Sie alle Zeichen vor dem PHP-Öffnungs-Tag.

Von der Verwendung des Die-Sprachkonstrukts wird abgeraten.

Von der Verwendung des Exit-Sprachkonstrukts wird abgeraten.

Empfehlung:Die setBody () -Antwortobjektmethode sollte verwendet werden.

Von der Verwendung des Echo-Sprachkonstrukts wird abgeraten.

Von der Verwendung des Print-Sprachkonstrukts wird abgeraten.

Empfehlung:Die Architektur der Erweiterung sollte geändert werden, um die Verwendung von Echo, Header usw. zu vermeiden.erwägen Sie in Klassen die Verwendung der setBody() -Methode des Antwortobjekts.

Von der Verwendung von eval() wird abgeraten

Empfehlung:Vermeiden Sie die Verwendung von eval() .


Im Gegensatz zu diesen Fehlern, die dazu führen, dass Ihre Erweiterung abgelehnt wird, werden Warnungen derzeit nur als Höflichkeit aufgeführt, um den Code Ihrer Erweiterung zu verbessern.Sie werden von Tech Review NICHT wegen Warnungen abgelehnt, wie viele es auch immer gibt.

Natürlich kann diese Regel in Zukunft verschärft werden, und der Codesniffer-Regelsatz wird ständig überprüft. Es ist also immer ein guter Plan zu sehen, wie viele Warnungen Sie beheben können.Die Warnungen können auch auf systemische Probleme mit Ihrer Codebasis hinweisen.


Einige Gründe für die Ablehnung der technischen Überprüfung werden derzeit nicht im Online-Bericht angezeigt und nur in der E-Mail angegeben.

Bei Dingen wie Copy-Paste-Verstößen und erkannter Malware werden nur Nachrichten in der E-Mail angezeigt, die Sie darüber informieren, dass Ihre Erweiterung nicht akzeptiert wurde, also lesen Sie die E-Mail sorgfältig durch.

Ein Archiv dieser E-Mails ist derzeit im Entwicklerportal nicht sichtbar. Wenn Sie sie also löschen, ohne sie zu lesen, oder sie in den Müll werfen, sind sie weg.

Die Level-1-Prüfer von Magento geben manchmal zusätzliche Informationen in diese E-Mail ein, entweder nur hilfreiche Dinge, von denen sie dachten, dass Sie sie vielleicht wissen möchten, wie "Dieser Array-Schlüssel "Server " sollte wahrscheinlich "Server" sein", oder die Gründe für ihre Ablehnung und Vorschläge, wie man es schnell löst, wie "Sie haben eine ganze Magento Core-Datei kopiert und nur den Klassenpfad geändert:sie können dies stattdessen durch eine Klasseneinstellung ersetzen.", oder "Sie haben eine ganze Magento Core-Datei kopiert, nur um einige öffentliche Funktionen zu ändern:Sie können stattdessen Plugins dafür verwenden."

Wenn Sie diese nicht lesen und sich nur den Codesniffer-Bericht ansehen, versuchen Sie möglicherweise, die falschen Probleme zu beheben.


Beachten Sie, dass die unescaped output detected nachricht sollte NICHT mit dem ausgewichen werden @escapeNotVerified oder @noEscape Kommentare.Dies wird wahrscheinlich in zukünftigen Versionen von Magento nicht erlaubt sein.Verwenden Sie stattdessen eine der folgenden Möglichkeiten:

  • Beliebige statische Zeichenfolge in einfachen Anführungszeichen.
  • Eine statische Zeichenfolge in doppelten Anführungszeichen ohne Inline-Variablen.
  • [ratsam] Ein Wert, der mit einer der Escape-Methoden von maskiert wurde \Magento\Framework\View\Element\AbstractBlock (escapeHtml(), escapeUrl(), escapeQuote(), escapeXssInUrl()).
  • Ein Wert, der in einen numerischen Typ umgewandelt wird (mindestens bool und int, vielleicht andere?)
  • Jeder Methodenaufruf mit dem Wort "html" im Namen, wie printBannerHtml().Missbrauche diesen nicht!Stellen Sie sicher, dass Ihre blahHtml() die Methode entzieht wirklich alle Variablen korrekt.

Fehler:

ungerückter Ausgang erfasst

Fehler in .phtml Datei

generasacodicetagpre.

Sie schreien Verwendung:

generasacodicetagpre.

Verweisen Sie auf die Vorlagen XSS-Sicherheit für http://devdocs.magento.com/guides/v2.0/frontend-dev-guide/tempates/template-security.html#cape-Functions-For-Templates

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top