Con el nuevo Magento Marketplace, una extensión enviada pasa por varios estados de validación para ser aprobada y disponible a través del Marketplace.
Una de ellas es la revisión técnica, desde la cual puede obtener un informe técnico como el siguiente:
Como puede ver, más de 200 advertencias me asustaron un poco, ¿hay algún recurso para ayudar a solucionar cada advertencia aparte de la lista disponible en los documentos: http://docs.magento.com/marketplace/user_guide/extensions/ review-code-validation.html ?
magento2
extensions
marketplace
Raphael en Digital Pianism
fuente
fuente
Respuestas:
Después de una hora de leer el informe, se me ocurrió la siguiente lista, podría ser útil para todos los que pienso.
Intentaré mantenerlo actualizado tan pronto como encuentre más advertencias / errores:
Advertencias
O
Esos son los que más he visto, se explican por sí mismos, es una buena práctica mantener pequeñas las líneas de codificación para mantener un código limpio y legible.
Ha llamado a una función que recibe parámetros y no ha agregado un espacio después de la coma. Ejemplo:
strrchr($bla,".")
debería serstrrchr($bla, ".")
Eso significa que ha devuelto una línea antes del paréntesis de apertura de esas declaraciones PHP.
Ejemplo de una sintaxis incorrecta con una instrucción if / else:
Debiera ser
La mayoría de las veces, sucede en el constructor donde declaras algo como esto:
Mientras que debería ser:
Ocurre la mayor parte del tiempo al comienzo del archivo, es causado por la forma en que su IDE codifica el carácter de retorno.
Cada variable debe usar el formato de camel caps, por lo que
$your_variable
debe ser$yourVariable
Evita usar números en tus variables
No debe usar estructuras de control en línea como:
Deberías usar:
Has devuelto una línea al declarar una clase:
Debe mantener la llave de apertura en la misma línea:
Debe agregar un guión bajo a sus variables de miembros protegidos y privados:
$_yourVariable
Como opuesto a esos dos, si agrega un guión bajo en su variable pública, puede obtener:
Has pasado un parámetro a un método pero nunca lo usas.
Ha agregado demasiada sangría a sus parámetros de declaración de función:
Debiera ser:
Está anulando un método sin agregar modificaciones, por ejemplo:
Está utilizando el
load()
método dentro de un bucle que no se recomienda y debe evitarse.Lo más probable es que su código se vea así:
Si está cargando un modelo en un bucle, es bastante malo en términos de rendimiento. Si solo necesita recuperar algunos atributos, debe usar colecciones en su lugar.
Si no está familiarizado con la complejidad ciclomática, le sugiero que lea esta publicación: https://pdepend.org/documentation/software-metrics/cyclomatic-complexity.html . Esta advertencia básicamente significa que hay demasiados bucles y condiciones en su función.
Se debe al hecho de que está creando una instancia de un objeto directamente llamando a la clase, por ejemplo:
Debe usar la inyección de dependencia o un último recurso, el administrador de objetos.
Uno de sus comentarios contiene la siguiente
@TODO
bandera.Ha creado una condición que parece ser siempre verdadera o falsa.
Por ejemplo:
Errores
Te estás perdiendo la
use Path\To\Class;
declaración al comienzo de tu clase.fuente
You should keep the opening brace on the same line:
¿No es al revés? Gran post por ciertoEl uso de Codesniffer con el conjunto de reglas MEQP1 o MEQP2 (dependiendo de su versión de Magento) le dará una idea sobre el conjunto de reglas de Magento: https://github.com/magento/marketplace-eqp/tree/master/
Este conjunto de reglas y el que se ejecuta en el proceso de envío de Marketplace NO siempre están perfectamente sincronizados (aunque, por supuesto, ese es el ideal), por lo que puede ser rechazado por errores de codefiffer incluso si pasa la última versión en Github.
Algunos de los errores más comunes de "gravedad 10" (los únicos errores por los que se rechazará su extensión) y sus recomendaciones enumeradas incluyen:
Recomendación: eliminar la etiqueta de cierre de PHP.
Recomendación: Lea la documentación sobre referencias en PHP 5 y refactorice su código. Referencias: http://php.net/manual/en/language.references.pass.php
Recomendación: utilice los objetos de contenedor correspondientes para obtener datos de cookies, sesiones o solicitudes.
Recomendación: Las funciones obsoletas no deben usarse, ya que pueden eliminarse en cualquier momento de una versión futura. [Probablemente un error genérico para todas las desvalorizaciones]
Recomendación: utilice el operador === para probar el valor de retorno de esta función.
Recomendación: [no hay una recomendación por separado. Me imagino que esto es para evitar que el ejecutivo ejecute las comillas.]
Recomendación: administre con cuidado la configuración, administración y manejo de privilegios. El recurso ACL se debe definir en el archivo adminhtml.xml para cada controlador adminhtml y se debe implementar el método _isAllowed ().
Recomendación: especifique el espacio de nombres de excepción.
Recomendación: Corregir error de sintaxis. [Este acompaña a lo anterior. Me imagino que se da un error genérico similar para todos los demás errores de sintaxis de PHP]
Recomendación: [Esto no viene con ninguna recomendación, pero describe el código donde se detecta el uso de clases como Mage :: blah o Mage_blah_blah :: blah: estas son clases que solo existen en Magento 1 y no funcionarán en Magento 2. Una buena idea es busque en su extensión M2 la expresión regular
Mage(\b|_)
para verificar previamente los usos de M1.]Recomendación: [No hay una recomendación por separado. Simplemente cambiar el nombre de la palabra a otra cosa debería funcionar. Me imagino que este error existe para todas las palabras reservadas.]
Recomendación: elimine todos los caracteres antes de la etiqueta de apertura de PHP.
Recomendación: se debe utilizar el método de objeto de respuesta setBody ().
Recomendación: La arquitectura de la extensión debe cambiarse para evitar el uso de echo, encabezado, etc. en las clases, considere usar el método setBody () del objeto de respuesta.
Recomendación: Evite usar eval ().
A diferencia de estos errores, que hacen que su extensión sea rechazada, las advertencias se enumeran actualmente simplemente como cortesía, para ayudar a mejorar el código de su extensión. NO será rechazado de la revisión técnica por advertencias, por muchas que haya.
Por supuesto, esta regla puede reforzarse en el futuro, y el conjunto de reglas codefiffer está en constante revisión, por lo que ver cuántas advertencias puede resolver siempre es un buen plan. Las advertencias también pueden indicar problemas sistémicos con su base de código.
Algunas razones para el rechazo de la revisión técnica no aparecen actualmente en el informe en línea, y solo se dan en el correo electrónico.
Cosas como las violaciones de copiar y pegar y el malware detectado solo mostrarán mensajes en el correo electrónico que reciba para informarle que su extensión no fue aceptada, así que lea el correo electrónico cuidadosamente .
Actualmente no se puede ver un archivo de estos correos electrónicos desde el portal del desarrollador, por lo que si los elimina sin leerlos o los archiva en basura, desaparecerán.
Los revisores de nivel 1 de Magento a veces ponen información adicional en este correo electrónico, ya sea solo cosas útiles que pensaron que querría saber, como "esta clave de matriz 'servidor' probablemente debería ser 'servidor'", o los fundamentos de su rechazo y sugerencias sobre cómo resolverlo rápidamente, como "Copiaste un archivo central completo de Magento y simplemente cambiaste el classpath: puedes reemplazarlo con una configuración de preferencia de clase en su lugar" o "Copiaste un archivo central completo de Magento solo para cambiar un par de funciones públicas: en su lugar, puede usar complementos para esto ".
Si no lee estos, y solo mira el informe de codeniffer, puede terminar tratando de solucionar los problemas incorrectos.
Tenga en cuenta que el
unescaped output detected
mensaje NO debe ser esquivado usando los comentarios@escapeNotVerified
o@noEscape
. Es probable que esto no se permita en futuras versiones de Magento. En su lugar, use uno de los siguientes:\Magento\Framework\View\Element\AbstractBlock
(escapeHtml()
,escapeUrl()
,escapeQuote()
,escapeXssInUrl()
).printBannerHtml()
. ¡No abuses de este! Asegúrese de que sublahHtml()
método realmente escape correctamente de todas las variables.fuente
Error:
Error en el archivo .phtml
Usted grita uso:
Consulte las plantillas de seguridad XSS para http://devdocs.magento.com/guides/v2.0/frontend-dev-guide/templates/template-security.html#escape-functions-for-templates
fuente
@noEscape
y@escapeNotValidated
de esta manera: si lo haces, es probable que sean desaprobados y luego rechazados por el sistema MEQP. Consulte la parte inferior de mi respuesta para ver una amplia gama de mejores formas de escapar de sus datos.