¿Cómo corregir las advertencias/errores generados por el informe de revisión técnica de Magento Marketplace?

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

Pregunta

Con el nuevo Magento Marketplace, una extensión enviada pasa por varios estados de validación para ser aprobada y estar disponible a través del Marketplace.

Uno de ellos es la revisión técnica, de la cual se puede obtener un informe técnico como el siguiente:

Marketplace Technical Report

Como puede ver, más de 200 advertencias me asustaron muchísimo. ¿Existe algún recurso que pueda 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?

¿Fue útil?

Solución

Después de una hora revisando el informe, se me ocurrió la siguiente lista, creo que podría ser útil para todos.

Intentaré mantenerlo actualizado tan pronto como encuentre más advertencias/errores:

Advertencias

La línea supera los 80 caracteres;contiene X caracteres

O

La línea excede el límite máximo de 100 caracteres;contiene X caracteres

Estos son los que he visto más, se explican por sí mismos, es una buena práctica mantener las líneas de codificación pequeñas para mantener un código limpio y legible.

No se encontró espacio después de la coma en la llamada a función

Ha llamado a una función que recibe parámetros y no agregó un espacio después de la coma.Ejemplo: strrchr($bla,".") debiera ser strrchr($bla, ".")

Se esperaba \"mientras (...) { \";encontrado \"mientras (...) { \"

Se esperaba \"foreach (...) { \";encontrado \"foreach (...) { \"

Se esperaba \"si (...) { \";encontrado \"si (...) { \"

Se esperaba \"} else { \";encontrado \"} else { \"

Eso significa que ha devuelto una línea antes del corchete de apertura de esas declaraciones PHP.

Ejemplo de una mala sintaxis con una declaración if/else:

if (true)
{
}
else
{
}

Debiera ser

if (true) {
} else {
}

El paréntesis de cierre y la llave de apertura de una declaración de función de varias líneas deben estar en la misma línea

La mayoría de las veces, sucede en el constructor donde declaras algo como esto:

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

Mientras que debería ser:

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

El carácter de fin de línea no es válido;esperado \" \" pero encontrado \" \"

Ocurre la mayor parte del tiempo al principio del archivo y se debe a la forma en que su IDE codifica el carácter de retorno.

La variable \"your_variable\" no está en formato camel caps válido

Cada variable debe usar el formato camel caps, por lo que $your_variable debiera ser $yourVariable

La variable \"one2Three\" contiene números, pero no se recomienda

Evite el uso de números en sus variables

No se permiten estructuras de control en línea.

No debería utilizar estructuras de control en línea como:

else $test = true;

Deberías usar:

else {
    $test = true;
}

La llave de apertura de una clase debe estar en la línea después de la definición.

Ha devuelto una línea al declarar una clase:

class Test
{

Debes mantener la llave de apertura en la misma línea:

class Test {

La variable miembro privada \"yourVariable\" debe contener un guión bajo inicial

La variable miembro protegida \"yourVariable\" debe contener un guión bajo inicial

Debe agregar un guión bajo inicial a sus variables miembro protegidas y privadas: $_yourVariable

A diferencia de esos dos, si agrega un guión bajo en su variable pública puede obtener:

La variable miembro pública \"_yourVariable\" no debe contener un guión bajo inicial.

El parámetro del método $bla nunca se utiliza

Ha pasado un parámetro a un método pero nunca lo usa.

La declaración de función de varias líneas no tiene sangría correcta;esperaba 8 espacios pero encontré X

Ha agregado demasiada sangría a los parámetros de declaración de su función:

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

Debiera ser:

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

Posible anulación de método inútil detectada

Estás anulando un método sin agregar modificaciones, ejemplo:

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

Modelo LSD método load() detectado en bucle

Estás usando el load() método dentro de un bucle que no se recomienda y debe evitarse.

Lo más probable es que tu código se vea así:

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

Si estás cargando un modelo en un bucle, es bastante malo en términos de rendimiento.Si solo necesita recuperar algunos atributos, debería utilizar colecciones en su lugar.

La complejidad ciclomática de la función (X) supera 10;considere refactorizar la función

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 desaconseja la creación de instancias de objetos directos en Magento 2

Se debe al hecho de que estás creando una instancia de un objeto directamente llamando a la clase, por ejemplo:

new \Zend_Filter_LocalizedToNormalized

Deberías utilizar la inyección de dependencia o, como último recurso, el administrador de objetos.

Los comentarios se refieren a una tarea TODO

Uno de sus comentarios contiene lo siguiente @TODO bandera.

Evite declaraciones SI que siempre sean verdaderas o falsas

Ha creado una condición que parece ser siempre verdadera o falsa.

Por ejemplo:

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

Errores

No se especifica el espacio de nombres para la clase \"Clase\".

te falta el use Path\To\Class; declaración al comienzo de su clase.

Otros consejos

Usar 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, eso es lo ideal), por lo que es posible que te rechacen por errores de codesniffer incluso si pasa la última versión en Github.

Algunos de los errores de "gravedad-10" más comunes (los únicos errores por los que se rechazará su extensión) y sus recomendaciones enumeradas incluyen:

No se permite una etiqueta de cierre al final de un archivo PHP

Recomendación:Eliminar la etiqueta de cierre de PHP.

Se prohíben las llamadas de paso por referencia en tiempo de llamada

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

Se detectó uso directo de $_ENV Superglobal.

Detectado uso directo de $_GET Superglobal.

Detectado uso directo de $_POST Superglobal.

Detectado uso directo de $_REQUEST Superglobal.

Detectado uso directo de $_SESSION Superglobal.

Detectado uso directo de $GLOBALS Superglobal.

Recomendación:Utilice los objetos contenedores correspondientes para obtener datos de cookies, sesiones o solicitudes.

La función set_magic_quotes_runtime() ha quedado obsoleta

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 desaprobaciones]

El operador idéntico === no se utiliza para probar el valor de retorno de la función strpos

El operador idéntico === no se utiliza para probar el valor de retorno de la función stripos

Recomendación:Utilice el operador === para probar el valor de retorno de esta función.

Uso incorrecto de la constante de cadena de comillas invertidas.Las comillas inversas deben estar siempre dentro de cadenas.

Recomendación:[sin recomendación separada.Me imagino que esto es para evitar que el ejecutivo use comillas invertidas.]

Falta el método ACL _isAllowed() en la clase [ClassName].

Recomendación:Administre con mucho cuidado la configuración, gestión y manejo de privilegios.El recurso ACL debe definirse en el archivo adminhtml.xml para cada controlador adminhtml y debe implementarse el método _isAllowed().

No se especifica el espacio de nombres para la clase [ExceptionClassName].

Recomendación:Especifique el espacio de nombres de excepción.

Error de sintaxis de PHP:Se ha eliminado el paso por referencia del tiempo de llamada.

Recomendación:Corregir error de sintaxis.[Este acompaña al anterior.Me imagino que se da un error genérico similar para todos los demás errores de sintaxis de PHP]

Posible violación del diseño de Magento 2.Se detectó una construcción típica de Magento 1.

Recomendación:[Esto no incluye 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 buscar en su extensión M2 la expresión regular Mage(\b|_) para verificar previamente los usos de M1.]

recurso es una palabra reservada en PHP 7.

Recomendación:[No hay ninguna recomendación separada.Simplemente cambiar el nombre de la palabra a otra debería funcionar.Imagino que este error existe para todas las palabras reservadas.]

La etiqueta PHP de apertura debe ser el primer contenido del archivo.

Recomendación:Elimine todos los caracteres antes de la etiqueta de apertura de PHP.

Se desaconseja el uso de la construcción del lenguaje.

Se desaconseja el uso de la construcción del lenguaje de salida.

Recomendación:Se debe utilizar el método del objeto de respuesta setBody().

Se desaconseja el uso de la construcción del lenguaje de eco.

Se desaconseja el uso de lenguaje impreso.

Recomendación:La arquitectura de la extensión debe cambiarse para evitar el uso de eco, encabezado, etc.en las clases, considere usar el método setBody() del objeto de respuesta.

Se desaconseja el uso de eval()

Recomendación:Evite el uso de evaluación().


A diferencia de estos errores, que hacen que su extensión sea rechazada, las advertencias actualmente se enumeran 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 ser más estricta en el futuro, y el conjunto de reglas de Codesniffer está bajo revisión constante, por lo que ver cuántas advertencias puedes resolver siempre es un buen plan.Las advertencias también pueden indicar problemas sistémicos con su código base.


Algunos motivos de rechazo de la revisión técnica no aparecen actualmente en el informe en línea y solo se proporcionan en el correo electrónico.

Cosas como violaciones de copiar y pegar y malware detectado solo mostrarán mensajes en el correo electrónico que reciba informándole que su extensión no fue aceptada, por lo que lee atentamente el correo electrónico.

Actualmente no se puede ver un archivo de estos correos electrónicos desde el portal de desarrolladores, por lo que si los elimina sin leerlos o los archiva como basura, desaparecerán.

Los revisores de nivel 1 de Magento a veces incluyen información adicional en este correo electrónico, ya sea simplemente cosas útiles que pensaron que usted podría querer saber, como "esta clave de matriz 'sever' probablemente debería ser 'servidor'", o las razones de su rechazo y sugerencias. sobre cómo resolverlo rápidamente, como "Copiaste un archivo principal completo de Magento y simplemente cambiaste la ruta de clase:puedes reemplazar esto con una configuración de preferencia de clase.", o "Copiaste un archivo principal completo de Magento solo para cambiar un par de funciones públicas:puedes usar complementos para esto en su lugar."

Si no los lee y simplemente mira el informe de Codesniffer, puede terminar intentando solucionar los problemas equivocados.


Tenga en cuenta que el unescaped output detected El mensaje NO debe ser esquivado usando el @escapeNotVerified o @noEscape comentarios.Es probable que esto no esté permitido en futuras versiones de Magento.En su lugar, utilice uno de los siguientes:

  • Cualquier cadena estática entre comillas simples.
  • Una cadena estática entre comillas dobles, sin variables en línea.
  • [recomendado] Un valor escapó con uno de los métodos de escape de \Magento\Framework\View\Element\AbstractBlock (escapeHtml(), escapeUrl(), escapeQuote(), escapeXssInUrl()).
  • Un valor convertido a un tipo numérico (al menos bool e int, ¿tal vez otros?)
  • Cualquier llamada a un método con la palabra "html" en el nombre, como printBannerHtml().¡No abuses de este!Asegúrate de que tu blahHtml() El método realmente escapa correctamente de todas las variables.

Error:

Salida sin instalación detectada

Error en archivo .phtml

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

Usted GHOUT USO:

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

Refiérase a las plantillas XSS Security para http://devdocs.magento.com/guides/v2.0/frontend-dev-guide/templates/template-security.html#escape-functions-for-templates

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top