Com o novo Magento Marketplace, uma extensão enviada passa por vários estados de validação para ser aprovada e disponível através do Marketplace.
Uma delas é a revisão técnica, da qual você pode obter um relatório técnico como o seguinte:
Como você pode ver, mais de 200 avisos meio que me assustaram, existe algum recurso para ajudar a corrigir todos os avisos além da lista disponível nos documentos: http://docs.magento.com/marketplace/user_guide/extensions/ review-code-validation.html ?
magento2
extensions
marketplace
Raphael na Digital Pianism
fonte
fonte
Respostas:
Depois de uma hora analisando o relatório, elaborei a lista a seguir, poderia ser útil para todos que eu acho.
Vou tentar mantê-lo atualizado assim que encontrar mais avisos / erros:
Advertências
Ou
Esses são os que eu mais vi, são auto-explicativos, é uma boa prática manter as linhas de codificação pequenas para manter um código limpo e legível.
Você chamou uma função que recebe parâmetros e não adicionou um espaço após a vírgula. Exemplo:
strrchr($bla,".")
deve serstrrchr($bla, ".")
Isso significa que você retornou uma linha antes do colchete de abertura dessas instruções PHP.
Exemplo de uma sintaxe incorreta com uma instrução if / else:
Deveria estar
Na maioria das vezes, isso acontece no construtor em que você declara algo como isto:
Considerando que deve ser:
Acontece na maioria das vezes no início do arquivo, é causado pela maneira como o IDE codifica o caractere de retorno.
Toda variável deve usar o formato camel caps, portanto,
$your_variable
deve ser$yourVariable
Evite usar números em suas variáveis
Você não deve usar estruturas de controle em linha, como:
Você deveria usar:
Você retornou uma linha ao declarar uma classe:
Você deve manter a chave de abertura na mesma linha:
Você deve adicionar um sublinhado à esquerda em suas variáveis de membro protegidas e privadas:
$_yourVariable
Ao contrário desses dois, se você adicionar um sublinhado em sua variável pública, poderá obter:
Você passou um parâmetro para um método, mas nunca o usa.
Você adicionou muita indentação aos seus parâmetros de declaração de função:
Deveria estar:
Você está substituindo um método sem adicionar modificações, por exemplo:
Você está usando o
load()
método dentro de um loop que não é recomendado e deve ser evitado.Provavelmente, seu código se parece com isso:
Se você está carregando um modelo em loop, é realmente muito ruim em termos de desempenho. Se você precisar recuperar apenas alguns atributos, use coleções.
Se você não conhece a complexidade ciclomática, sugiro que você leia este post: https://pdepend.org/documentation/software-metrics/cyclomatic-complexity.html . Esse aviso basicamente significa que há muitos loops e condições em sua função.
Isso é causado pelo fato de você estar instanciando um objeto diretamente chamando a classe, por exemplo:
Você deve usar injeção de dependência ou, por último, o gerenciador de objetos.
Um dos seus comentários contém o seguinte
@TODO
sinalizador.Você criou uma condição que parece sempre ser verdadeira ou falsa.
Por exemplo:
Erros
Está faltando a
use Path\To\Class;
afirmação no início da sua aula.fonte
You should keep the opening brace on the same line:
não é o contrário? Ótimo post a propósitoO uso do Codesniffer com o conjunto de regras MEQP1 ou MEQP2 (dependendo da sua versão do Magento) fornecerá uma idéia sobre o conjunto de regras Magento: https://github.com/magento/marketplace-eqp/tree/master/
Esse conjunto de regras e o que está sendo executado no processo de envio do Marketplace nem sempre estão perfeitamente sincronizados (embora, é claro, esse seja o ideal); portanto, você pode ser rejeitado por erros de códigos diferentes, mesmo que passe a versão mais recente no Github.
Alguns dos erros "severidade-10" mais comuns (os únicos erros pelos quais sua extensão será rejeitada) e as recomendações listadas incluem:
Recomendação: Remova a tag de fechamento do PHP.
Recomendação: Leia a documentação sobre referências no PHP 5 e refatorar seu código. Referências: http://php.net/manual/en/language.references.pass.php
Recomendação: Use objetos de wrapper correspondentes para obter dados de cookie, sessão ou solicitação.
Recomendação: As funções obsoletas não devem ser usadas, pois podem ser removidas a qualquer momento de uma versão futura. [Provavelmente um erro genérico para todas as reprovações]
Recomendação: Use o operador === para testar o valor de retorno desta função.
Recomendação: [nenhuma recomendação separada. Eu imagino que este é para impedir o executivo através de aspas.]
Recomendação: gerencie com muito cuidado a configuração, o gerenciamento e a manipulação de privilégios. O recurso ACL deve ser definido no arquivo adminhtml.xml para cada controlador adminhtml e o método _isAllowed () deve ser implementado.
Recomendação: Especifique o namespace Exception.
Recomendação: Corrija o erro de sintaxe. [Este acompanha o acima. Eu imagino que um erro genérico semelhante seja dado para todos os outros erros de sintaxe do PHP]
Recomendação: [Isso não vem com recomendação, mas descreve o código em que o uso de classe como Mage :: blah ou Mage_blah_blah :: blah é detectado - são classes que existem apenas no Magento 1 e não funcionam no Magento 2. Uma boa idéia é procure na extensão M2 o regex
Mage(\b|_)
para pré-verificar os usos do M1.]Recomendação: [Nenhuma recomendação separada. Simplesmente renomear a palavra para outra coisa deve funcionar. Eu imagino que esse erro exista para todas as palavras reservadas.]
Recomendação: Remova todos os caracteres antes da tag de abertura do PHP.
Recomendação: o método do objeto de resposta setBody () deve ser usado.
Recomendação: A arquitetura da extensão deve ser alterada para evitar o uso de eco, cabeçalho etc. nas classes, considere usar o método setBody () do objeto de resposta.
Recomendação: Evite usar eval ().
Diferentemente desses erros, que fazem com que sua extensão seja rejeitada, atualmente os avisos são listados apenas como cortesia, para ajudar a melhorar o código da extensão. Você NÃO será rejeitado da revisão técnica por avisos, por mais que existam.
Obviamente, essa regra pode ser mais rígida no futuro, e o conjunto de regras diferente de código está sendo revisado constantemente; portanto, ver quantos avisos você pode resolver é sempre um bom plano. Os avisos também podem indicar problemas sistêmicos na sua base de código.
No momento, alguns motivos de rejeição da revisão técnica não aparecem no relatório on-line e são fornecidos apenas no e-mail.
Coisas como violações de copiar e colar e malware detectado terão apenas mensagens mostradas no e-mail recebido, informando que sua extensão não foi aceita, portanto, leia o e-mail com atenção .
No momento, um arquivo desses e-mails não está visível no portal do desenvolvedor; portanto, se você os excluir sem ler ou os arquivar como lixo eletrônico, eles desaparecerão.
Os revisores de nível 1 do Magento às vezes colocam informações extras neste e-mail, ou apenas coisas úteis que eles achavam que você poderia querer saber, como "essa chave de matriz 'sever' provavelmente deve ser 'servidor'" ou as razões para sua rejeição e sugestões sobre como resolvê-lo rapidamente, como "Você copiou um arquivo principal do Magento e acabou de alterar o caminho da classe: em vez disso, você pode substituí-lo por uma configuração de preferência de classe." ou "Você copiou um arquivo principal do Magento apenas para alterar algumas funções públicas: você pode usar plugins para isso. "
Se você não os ler, e apenas olhar o relatório de códigos diferentes, poderá acabar tentando corrigir os problemas errados.
Note que a
unescaped output detected
mensagem não deve ser evitado usando o@escapeNotVerified
ou@noEscape
comentários. Isso provavelmente não será permitido em versões futuras do Magento. Em vez disso, use um dos seguintes:\Magento\Framework\View\Element\AbstractBlock
(escapeHtml()
,escapeUrl()
,escapeQuote()
,escapeXssInUrl()
).printBannerHtml()
. Não abuse deste! Certifique-se de que seublahHtml()
método realmente escape corretamente de todas as variáveis.fonte
Erro:
Erro no arquivo .phtml
Você grita:
Consulte a segurança de Modelos XSS em http://devdocs.magento.com/guides/v2.0/frontend-dev-guide/templates/template-security.html#escape-functions-for-templates
fonte
@noEscape
e@escapeNotValidated
desta maneira: se o fizer, é provável que sejam preteridos e depois proibidos pelo sistema MEQP. Veja o final da minha resposta para uma grande variedade de maneiras melhores de escapar dos seus dados.