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 suit:
Comme vous pouvez le voir, plus de 200 avertissements m'ont un peu effrayé, y a-t-il une ressource pour aider à corriger chaque avertissement en dehors de la liste disponible dans les documents: http://docs.magento.com/marketplace/user_guide/extensions/ review-code-validation.html ?
magento2
extensions
marketplace
Raphael chez Digital Pianism
la source
la source
Réponses:
Après une heure à parcourir le rapport, j'ai trouvé la liste suivante, cela pourrait être utile pour tout le monde, je pense.
J'essaierai de le garder à jour dès que je trouverai d'autres avertissements / erreurs:
Avertissements
Ou
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.
Vous avez appelé une fonction qui reçoit des paramètres et n'ajoutez pas d'espace après la virgule. Exemple:
strrchr($bla,".")
devrait êtrestrrchr($bla, ".")
Cela signifie que vous avez renvoyé une ligne avant la parenthèse ouvrante de ces instructions PHP.
Exemple d'une mauvaise syntaxe avec une instruction if / else:
Devrait être
La plupart du temps, cela se produit dans le constructeur où vous déclarez quelque chose comme ceci:
Attendu qu'il devrait être:
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.
Chaque variable doit utiliser le format des casquettes de chameau, donc
$your_variable
devrait être$yourVariable
Évitez d'utiliser des nombres dans vos variables
Vous ne devez pas utiliser de structures de contrôle en ligne telles que:
Tu devrais utiliser:
Vous avez renvoyé une ligne lors de la déclaration d'une classe:
Vous devez garder l'accolade d'ouverture sur la même ligne:
Vous devez ajouter un trait de soulignement à vos variables membres protégées et privées:
$_yourVariable
Contrairement à ces deux, si vous ajoutez un trait de soulignement dans votre variable publique, vous pouvez obtenir:
Vous avez passé un paramètre à une méthode mais vous ne l'utilisez jamais.
Vous avez ajouté trop d'indentation à vos paramètres de déclaration de fonction:
Devrait être:
Vous remplacez une méthode sans ajouter de modifications, par exemple:
Vous utilisez la
load()
méthode à l'intérieur d'une boucle qui n'est pas recommandée et doit être évitée.Votre code ressemble très probablement à ceci:
Si vous chargez un modèle dans une boucle, c'est en effet assez mauvais en termes de performances. Si vous avez seulement besoin de récupérer quelques attributs, vous devez utiliser des collections à la place.
Si vous n'êtes pas familier avec la complexité cyclomatique, je vous suggère de lire ce post: 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.
Cela est dû au fait que vous instanciez directement un objet en appelant la classe, par exemple:
Vous devez utiliser l'injection de dépendance ou un dernier recours, le gestionnaire d'objets.
L'un de vos commentaires contient le
@TODO
drapeau suivant .Vous avez créé une condition qui semble toujours vraie ou fausse.
Par exemple:
les erreurs
Vous manquez la
use Path\To\Class;
déclaration au début de votre classe.la source
You should keep the opening brace on the same line:
n'est-ce pas l'inverse? Great post by the wayL'utilisation de Codesniffer avec l'ensemble de règles MEQP1 ou MEQP2 (selon votre version de Magento) vous donnera une idée de l'ensemble de règles Magento: https://github.com/magento/marketplace-eqp/tree/master/
Cet ensemble de règles et celui qui s'exécute sur le processus de soumission de Marketplace ne sont pas toujours parfaitement synchronisés (bien que ce soit bien sûr l'idéal), vous pouvez donc être rejeté pour les erreurs codesniffer même s'il passe la dernière version sur Github.
Certaines des erreurs "gravité-10" les plus courantes (les seules erreurs pour lesquelles votre extension sera rejetée), et leurs recommandations répertoriées, incluent:
Recommandation: supprimez la balise de fermeture PHP.
Recommandation: lisez la documentation sur les références en PHP 5 et refactorisez votre code. Références: http://php.net/manual/en/language.references.pass.php
Recommandation: utilisez les objets wrapper correspondants afin d'obtenir des données de cookie, de session ou de demande.
Recommandation: les fonctions obsolètes ne doivent pas être utilisées car elles peuvent être supprimées à tout moment d'une future version. [Probablement une erreur générique pour toutes les dépréciations]
Recommandation: utilisez l'opérateur === pour tester la valeur de retour de cette fonction.
Recommandation: [pas de recommandation distincte. J'imagine que celui-ci est d'empêcher l'exec par des guillemets.]
Recommandation: gérez très soigneusement la définition, 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.
Recommandation: spécifiez l'espace de noms d'exception.
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]
Recommandation: [Cela ne contient aucune recommandation, mais décrit le code où l'utilisation de classe 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 recherchez dans votre extension M2 le regex
Mage(\b|_)
pour pré-vérifier les utilisations M1.]Recommandation: [Pas de recommandation distincte. Renommer simplement le mot à quelque chose d'autre devrait fonctionner. J'imagine que cette erreur existe pour tous les mots réservés.]
Recommandation: supprimez tous les caractères avant la balise d'ouverture PHP.
Recommandation: la méthode d'objet de réponse setBody () doit être utilisée.
Recommandation: L'architecture de l'extension doit être modifiée afin d'éviter l'utilisation de l'écho, de l'en-tête, etc. dans les classes, pensez à utiliser la méthode setBody () de l'objet de réponse.
Recommandation: évitez d'utiliser eval ().
Contrairement à ces erreurs, qui provoquent le rejet de votre extension, les avertissements sont actuellement répertoriés uniquement à titre de courtoisie, pour aider à améliorer le code de votre extension. Vous ne serez PAS rejeté de l'examen technique pour les avertissements, aussi nombreux soient-ils.
Bien sûr, cette règle pourrait être resserrée à l'avenir, et l'ensemble de règles codesniffer 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.
Certaines raisons de rejet de l'examen technique n'apparaissent pas actuellement sur le rapport en ligne et ne sont indiquées que dans l'e-mail.
Des choses comme les violations de copier-coller et les logiciels malveillants détectés n'auront que des messages affichés dans l'e-mail que vous recevrez vous informant que votre extension n'a pas été acceptée, alors lisez attentivement l'e-mail .
Une archive de ces e-mails n'est actuellement pas visible depuis le portail des développeurs, donc si vous les supprimez sans les lire, ou si vous les déposez dans le courrier indésirable, ils disparaissent.
Les examinateurs 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 pourriez vouloir savoir, comme «cette clé de tableau« serveur »devrait probablement être« serveur »», ou les raisons de leur rejet et de leurs suggestions sur la façon de le résoudre rapidement, comme "Vous avez copié un fichier core Magento entier et vous avez juste changé le chemin de classe: vous pouvez le remplacer par un paramètre de préférence de classe à la place.", ou "Vous avez copié un fichier core Magento entier juste pour changer quelques fonctions publiques: vous pouvez utiliser des plugins pour cela à la place. "
Si vous ne les lisez pas et que vous ne regardez que le rapport codesniffer, vous pouvez finir par essayer de résoudre les mauvais problèmes.
Notez que le
unescaped output detected
message ne doit PAS être esquivé à l'aide des commentaires@escapeNotVerified
ou@noEscape
. Cela sera probablement interdit dans les futures versions de Magento. Utilisez plutôt l'un des éléments suivants:\Magento\Framework\View\Element\AbstractBlock
(escapeHtml()
,escapeUrl()
,escapeQuote()
,escapeXssInUrl()
).printBannerHtml()
. N'abusez pas de celui-ci! Assurez-vous que votreblahHtml()
méthode échappe vraiment correctement à toutes les variables.la source
Erreur:
Erreur dans le fichier .phtml
Vous criez utiliser:
Reportez-vous à la sécurité des modèles XSS pour http://devdocs.magento.com/guides/v2.0/frontend-dev-guide/templates/template-security.html#escape-functions-for-templates
la source
@noEscape
et@escapeNotValidated
de cette manière: si vous le faites, elles seront probablement obsolètes, puis interdites par le système MEQP. Voir le bas de ma réponse pour un large éventail de meilleures façons d'échapper à vos données.