Comment corriger les avertissements/erreurs soulevés par le rapport d'examen technique de Magento Marketplace ?

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

Question

Avec le nouveau Magento Marketplace, une extension soumise passe par plusieurs états de validation afin d'être approuvée et disponible via le Marketplace.

L’un d’eux est l’examen technique, à partir duquel vous pouvez obtenir un rapport technique comme le suivant :

Marketplace Technical Report

Comme vous pouvez le voir, plus de 200 avertissements m'ont un peu fait peur. Existe-t-il une ressource pour aider à corriger chaque avertissement en dehors de la liste disponible dans la documentation : http://docs.magento.com/marketplace/user_guide/extensions/review-code-validation.html?

Était-ce utile?

La solution

Après une heure à parcourir le rapport, j'ai dressé la liste suivante. Elle pourrait être utile à tout le monde, je pense.

J'essaierai de le maintenir à jour dès que je trouverai d'autres avertissements/erreurs :

Avertissements

La ligne dépasse 80 caractères ;contient X caractères

Ou

La ligne dépasse la limite maximale de 100 caractères ;contient X caractères

Ceux-là sont ceux que j'ai vus le plus, ils sont explicites, c'est une bonne pratique de garder les lignes de codage petites afin de garder un code propre et lisible.

Aucun espace trouvé après la virgule dans l'appel de fonction

Vous avez appelé une fonction qui reçoit des paramètres et n'avez pas ajouté d'espace après la virgule.Exemple: strrchr($bla,".") devrait être strrchr($bla, ".")

Attendu \"pendant (...) { \";trouvé \"pendant (...) { \"

Attendu \"foreach (...) { \";trouvé \"foreach (...) { \"

Attendu \"si (...) { \";trouvé \"si (...) { \"

Attendu \"} else { \";trouvé \"} sinon { \"

Cela signifie que vous avez renvoyé une ligne avant le crochet ouvrant de ces instructions PHP.

Exemple de mauvaise syntaxe avec une instruction if/else :

if (true)
{
}
else
{
}

Devrait être

if (true) {
} else {
}

La parenthèse fermante et l'accolade ouvrante d'une déclaration de fonction multiligne doivent être sur la même ligne

La plupart du temps, cela se produit dans le constructeur où vous déclarez quelque chose comme ceci :

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

Alors que cela devrait être :

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

Le caractère de fin de ligne n'est pas valide ;attendu \" \" mais trouvé \" \"

Cela se produit la plupart du temps au début du fichier, cela est dû à la façon dont votre IDE code le caractère de retour.

La variable « votre_variable » n'est pas au format de casquettes de chameau valide.

Chaque variable doit utiliser le format camel caps, donc $your_variable devrait être $yourVariable

La variable \"one2Three\" contient des nombres mais cela est déconseillé

Évitez d'utiliser des nombres dans vos variables

Les structures de contrôle en ligne ne sont pas autorisées

Vous ne devez pas utiliser de structures de contrôle en ligne telles que :

else $test = true;

Tu devrais utiliser:

else {
    $test = true;
}

L'accolade ouvrante d'une classe doit être sur la ligne après la définition

Vous avez renvoyé une ligne lors de la déclaration d'une classe :

class Test
{

Vous devez garder l’accolade ouvrante sur la même ligne :

class Test {

La variable membre privée \"votreVariable\" doit contenir un trait de soulignement en début de page.

La variable membre protégée \"votreVariable\" doit contenir un trait de soulignement en début de page.

Vous devez ajouter un trait de soulignement à vos variables membres protégées et privées : $_yourVariable

Contrairement à ces deux-là, si vous ajoutez un trait de soulignement dans votre variable publique, vous pouvez obtenir :

La variable membre publique \"_yourVariable\" ne doit pas contenir de trait de soulignement au début.

Le paramètre de méthode $bla n'est jamais utilisé

Vous avez passé un paramètre à une méthode mais vous ne l'utilisez jamais.

La déclaration de fonction multiligne n'est pas correctement indentée ;attendu 8 espaces mais trouvé X

Vous avez ajouté trop d'indentation aux paramètres de déclaration de votre fonction :

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

Devrait être:

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

Éventuel remplacement de méthode inutile détecté

Vous remplacez une méthode sans ajouter de modifications, exemple :

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

Méthode Load() du modèle LSD détectée dans la boucle

Vous utilisez le load() méthode à l’intérieur d’une boucle qui n’est pas recommandée et doit être évitée.

Très probablement, votre code ressemble à ceci :

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

Si vous chargez un modèle en boucle, c'est effectivement assez mauvais en termes de performances.Si vous n’avez besoin de récupérer que quelques attributs, vous devez plutôt utiliser des collections.

La complexité cyclomatique de la fonction (X) dépasse 10 ;envisagez de refactoriser la fonction

Si vous n'êtes pas familier avec la complexité cyclomatique, je vous suggère de lire cet article : https://pdepend.org/documentation/software-metrics/cyclomatic-complexity.html .Cet avertissement signifie essentiellement qu'il y a trop de boucles et de conditions dans votre fonction.

L'instanciation d'objet direct est déconseillée dans Magento 2

Cela est dû au fait que vous instanciez un objet directement en appelant la classe, par exemple :

new \Zend_Filter_LocalizedToNormalized

Vous devez utiliser l'injection de dépendances ou, en dernier recours, le gestionnaire d'objets.

Les commentaires font référence à une tâche TODO

L'un de vos commentaires contient ce qui suit @TODO drapeau.

Évitez les déclarations IF qui sont toujours vraies ou fausses

Vous avez créé une condition qui semble toujours être vraie ou fausse.

Par exemple:

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

les erreurs

L'espace de noms pour la classe \"Class\" n'est pas spécifié.

Il te manque le use Path\To\Class; déclaration au début de votre cours.

Autres conseils

Utiliser Codesniffer avec l'ensemble de règles MEQP1 ou MEQP2 (selon votre version de Magento) vous donnera une idée sur l'ensemble de règles Magento : https://github.com/magento/marketplace-eqp/tree/master/

Cet ensemble de règles et celui exécuté sur le processus de soumission de Marketplace ne sont PAS toujours parfaitement synchronisés (même si bien sûr, c'est l'idéal), vous pourriez donc être rejeté pour les erreurs de codeniffer même s'il transmet la dernière version sur Github.

Certaines des erreurs de « gravité 10 » les plus courantes (les seules erreurs pour lesquelles votre extension sera rejetée) et leurs recommandations répertoriées incluent :

Une balise fermante n'est pas autorisée à la fin d'un fichier PHP

Recommandation:Supprimez la balise de fermeture PHP.

Les appels par référence pendant les heures d'appel sont interdits

Recommandation:Lisez la documentation sur les références en PHP 5 et refactorisez votre code.Les références: http://php.net/manual/en/langue.references.pass.php

Utilisation directe de $_ENV Superglobal détectée.

Utilisation directe de $_GET Superglobal détectée.

Utilisation directe de $_POST Superglobal détectée.

Utilisation directe de $_REQUEST Superglobal détectée.

Utilisation directe de $_SESSION Superglobal détectée.

Utilisation directe de $GLOBALS Superglobal détectée.

Recommandation:Utilisez les objets wrapper correspondants afin d'obtenir des données de cookie, de session ou de demande.

La fonction set_magic_quotes_runtime() est obsolète

Recommandation:Les fonctions obsolètes ne doivent pas être utilisées car elles peuvent être supprimées à tout moment d'une version future.[Probablement une erreur générique pour toutes les dépréciations]

L'opérateur identique === n'est pas utilisé pour tester la valeur de retour de la fonction strpos

L'opérateur identique === n'est pas utilisé pour tester la valeur de retour de la fonction stripos

Recommandation:Utilisez l'opérateur === pour tester la valeur de retour de cette fonction.

Utilisation incorrecte de la constante de chaîne de guillemets arrière.Les guillemets arrière doivent toujours être à l’intérieur des chaînes.

Recommandation:[pas de recommandation distincte.J'imagine que celui-ci est destiné à empêcher l'exécution via des backquotes.]

Il manque la méthode ACL _isAllowed() dans la classe [ClassName].

Recommandation:Gérer très soigneusement la configuration, la gestion et la gestion des privilèges.La ressource ACL doit être définie dans le fichier adminhtml.xml pour chaque contrôleur adminhtml et la méthode _isAllowed() doit être implémentée.

L'espace de noms pour la classe [ExceptionClassName] n'est pas spécifié.

Recommandation:Spécifiez l’espace de noms d’exception.

Erreur de syntaxe PHP :Le passage par référence de l'heure d'appel a été supprimé

Recommandation:Correction d'une erreur de syntaxe.[Celui-ci accompagne ce qui précède.J'imagine qu'une erreur générique similaire est donnée pour toutes les autres erreurs de syntaxe PHP]

Violation possible de la conception de Magento 2.Construction typique de Magento 1 détectée.

Recommandation:[Cela ne contient aucune recommandation, mais décrit le code dans lequel l'utilisation de classes comme Mage::blah ou Mage_blah_blah::blah est détectée - ce sont des classes qui n'existent que dans Magento 1 et ne fonctionneront pas dans Magento 2.Une bonne idée est de rechercher l'expression régulière dans votre extension M2. Mage(\b|_) pour pré-vérifier les utilisations M1.]

ressource est un mot réservé en PHP 7.

Recommandation:[Pas de recommandation distincte.Renommer simplement le mot en quelque chose d'autre devrait fonctionner.J'imagine que cette erreur existe pour tous les mots réservés.]

La balise PHP d'ouverture doit être le premier contenu du fichier

Recommandation:Supprimez tous les caractères avant la balise d'ouverture PHP.

L'utilisation de la construction du langage est déconseillée.

L’utilisation de la construction du langage de sortie est déconseillée.

Recommandation:La méthode d’objet de réponse setBody() doit être utilisée.

L’utilisation de la construction du langage echo est déconseillée.

L'utilisation de la construction du langage d'impression est déconseillée.

Recommandation:L'architecture de l'extension doit être modifiée afin d'éviter l'utilisation d'écho, d'en-tête, etc.dans les classes, envisagez d'utiliser la méthode setBody() de l'objet de réponse.

L'utilisation de eval() est déconseillée

Recommandation:Évitez d'utiliser eval().


Contrairement à ces erreurs, qui entraînent le rejet de votre extension, les avertissements ne sont actuellement répertoriés qu'à titre gracieux, pour aider à améliorer le code de votre extension.Vous ne serez PAS rejeté de l’examen technique pour des avertissements, quel que soit leur nombre.

Bien sûr, cette règle pourrait être renforcée à l'avenir, et l'ensemble de règles du codeniffer est constamment révisé, donc voir combien d'avertissements vous pouvez résoudre est toujours un bon plan.Les avertissements peuvent également indiquer des problèmes systémiques avec votre base de code.


Certains motifs de rejet de l'examen technique n'apparaissent pas actuellement dans le rapport en ligne et ne sont indiqués que dans l'e-mail.

Des éléments tels que les violations de copier-coller et les logiciels malveillants détectés n'afficheront que des messages dans l'e-mail que vous recevrez vous informant que votre extension n'a pas été acceptée. lisez attentivement l'e-mail.

Une archive de ces e-mails n'est actuellement pas visible sur le portail des développeurs, donc si vous les supprimez sans les lire ou si vous les classez dans la liste indésirable, ils disparaissent.

Les évaluateurs de niveau 1 de Magento mettent parfois des informations supplémentaires dans cet e-mail, soit simplement des choses utiles qu'ils pensaient que vous voudriez connaître, comme "cette clé de tableau 'sever' devrait probablement être 'serveur'", ou les justifications de leur rejet et leurs suggestions. sur la façon de le résoudre rapidement, comme "Vous avez copié l'intégralité d'un fichier principal Magento et vous venez de modifier le chemin de classe :vous pouvez le remplacer par un paramètre de préférence de classe à la place.", ou "Vous avez copié l'intégralité d'un fichier principal de Magento juste pour modifier quelques fonctions publiques :vous pouvez utiliser des plugins pour cela à la place."

Si vous ne les lisez pas et regardez simplement le rapport Codesniffer, vous risquez de finir par essayer de résoudre les mauvais problèmes.


Notez que le unescaped output detected le message ne doit PAS être esquivé à l’aide du @escapeNotVerified ou @noEscape commentaires.Cela sera probablement interdit dans les futures versions de Magento.Utilisez plutôt l'un des éléments suivants :

  • Toute chaîne statique entre guillemets simples.
  • Une chaîne statique entre guillemets doubles, sans variables en ligne.
  • [recommandé] Une valeur échappée avec l'une des méthodes d'échappement de \Magento\Framework\View\Element\AbstractBlock (escapeHtml(), escapeUrl(), escapeQuote(), escapeXssInUrl()).
  • Une valeur convertie en type numérique (au moins bool et int, peut-être d'autres ?)
  • Tout appel de méthode avec le mot "html" dans le nom, comme printBannerHtml().N'abusez pas de celui-ci !Assurez-vous que votre blahHtml() La méthode échappe vraiment correctement à toutes les variables.

ERREUR:

sortie non évaluée détectée

erreur dans le fichier .phtml

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

vous criez Utilisation:

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

renvoyer les modèles Security XSS pour http://devdocs.magento.com/guides/v2.0/frontend-dev-Guide/Templates/template-security.html#escape-fonctions-for-Templates

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top