Como corrigir erros / avisos levantada pelo Magento Mercado técnico relatório de revisão?

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

Pergunta

Com o novo Magento Mercado, uma proposta de extensão passa por várias validação estados, a fim de ser aprovado e disponível através do Mercado.

Uma delas é a análise técnica, a partir do qual você pode obter um relatório técnico, como o seguinte:

Marketplace Technical Report

Como você pode ver, 200+ avisos meio assustado o inferno fora de mim, existe algum recurso para ajudar a fixação de cada aviso para além da lista disponível no google docs: http://docs.magento.com/marketplace/user_guide/extensions/review-code-validation.html?

Foi útil?

Solução

Depois de uma hora de atravessar o relatório veio-me a seguinte lista, que poderia ser útil para todos, eu acho.

Vou tentar mantê-lo atualizado assim que eu encontrar mais erros/avisos:

Avisos

Linha excede 80 caracteres;contém caracteres X

Ou

Linha excede o limite máximo de 100 caracteres;contém caracteres X

Esses são o que eu vi, eles são auto-explicativos, é uma boa prática manter linhas de codificação pequenos, a fim de manter um ambiente limpo e código legível.

Não há espaço encontrado após a vírgula na chamada de função

Você tem chamado de uma função que recebe parâmetros e não acrescente um espaço após a vírgula.Exemplo: strrchr($bla,".") deve ser strrchr($bla, ".")

O esperado \"while (...) { \";encontrado \"enquanto (...) { \"

O esperado \"foreach (...) { \";encontrado \"foreach (...) { \"

O esperado \"se (...) { \";encontrado \"se (...) { \"

O esperado \"} else { \";encontrado \"} else { \"

Isso significa que você retornou a uma linha antes do parêntese de abertura desses PHP declarações.

Exemplo de uma má sintaxe, com um if/else instrução:

if (true)
{
}
else
{
}

Deve ser

if (true) {
} else {
}

O parêntese de fechamento e a chave de abertura de uma multi-linha de declaração de função deve ser na mesma linha

Na maioria das vezes, isso acontece no construtor de onde você declarar algo como isto:

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

Considerando que deve ser:

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

Final da linha de caracteres são inválidos;o esperado \" \", mas encontrado \" \"

Acontece a maior parte do tempo no início do arquivo, ele é causado pela maneira como o seu IDE codifica o caractere de retorno.

Variável \"your_variable\" não é válido em camelo formato de maiúsculas

Cada variável deve usar o camelo formato de maiúsculas, de modo $your_variable deve ser $yourVariable

Variável \"one2Three\" contém números, mas isso é desencorajado

Evitar o uso de números no seu variáveis

Inline estruturas de controle não são permitidos

Você não deve estar usando inline estruturas de controle, tais como:

else $test = true;

Você deve usar:

else {
    $test = true;
}

Chave de abertura de uma classe deve ser na linha após a definição

Você retornou a uma linha quando a declaração de uma classe:

class Test
{

Você deve manter a chave de abertura na mesma linha:

class Test {

Variável de membro privado \"yourVariable\" deve conter um carácter de sublinhado à esquerda

Variável de membro protegido \"yourVariable\" deve conter um carácter de sublinhado à esquerda

Você deve adicionar um sublinhado à esquerda para o seu protegido e variáveis de membro privado: $_yourVariable

Como o oposto do que esses dois, se você adicionar um carácter de sublinhado em seus públicas variável que você pode obter:

Variável de membro público \"_yourVariable\" não deve conter um carácter de sublinhado à esquerda.

O parâmetro do método $bla nunca é usado

Você tem passado um parâmetro para um método, mas você nunca usá-lo.

Multi-função de linha de declaração não foi feita corretamente;espera-8 espaços, mas descobriu X

Você adicionou muito recuo para a sua declaração de função de parâmetros:

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

Deve ser:

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

Possível inútil método substituindo detectado

Você está substituindo um método sem adição de modificações, exemplo:

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

Modelo de LSD método load() detectados em loop

Você está usando o load() método dentro de um ciclo que não é recomendado e deve ser evitado.

Mais provável que seu código tenha esta aparência:

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

Se você está carregando um modelo de um ciclo é de fato muito ruim, em termos de desempenho.Se você precisa apenas recuperar alguns atributos, você deve usar a coleções.

Função cyclomatic complexidade (X) exceeeds 10;considere a função de refatoração

Se você não estiver familiarizado com cyclomatic complexidade, sugiro você dar uma lida neste post: https://pdepend.org/documentation/software-metrics/cyclomatic-complexity.html .Esse aviso significa, basicamente, que há muitos loops e condições em sua função.

Direto de instanciação do objeto é desestimular no Magento 2

Ela é causada pelo fato de que você está instanciando um objeto diretamente chamando a classe, por exemplo:

new \Zend_Filter_LocalizedToNormalized

Você deve usar injeção de dependência ou última instância, o gerenciador de objetos.

Comentários referem-se a uma tarefa de FAZER

Um do seu comentário contém as seguintes @TODO bandeira.

Evitar, SE as instruções que estão sempre true ou false

Você tem de criar uma condição que parece ser sempre verdadeiro ou falso.

Por exemplo:

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

Erros

Espaço de nomes \"Class\" classe não é especificado.

Você está ausente o use Path\To\Class; instrução no início de sua classe.

Outras dicas

Usando Codesniffer com o MEQP1 ou MEQP2 conjunto de regras (dependendo da sua versão do Magento) irá dar-lhe uma idéia sobre o Magento conjunto de regras: https://github.com/magento/marketplace-eqp/tree/master/

Este conjunto de regras e a uma execução no Mercado de submeter o processo NÃO são sempre perfeitamente em sincronia (embora, é claro, que o ideal), assim você pode obter rejeitado por codesniffer erros, mesmo se passa, a versão mais recente no Github.

Alguns dos mais comuns "gravidade-10 erros" (o único erros de sua extensão será rejeitado por), e o seu listados recomendações incluem:

Um tag de fechamento não é permitido no final de um arquivo PHP

Recomendação:Remover a tag de fechamento do PHP.

Chamada de tempo de passagem por referência as chamadas são proibidos

Recomendação:Leia a documentação sobre referências em PHP 5 e refatorar seu código.Referências: http://php.net/manual/en/language.references.pass.php

Uso direto de us $_ENV Superglobal detectado.

Uso direto de us $_GET Superglobal detectado.

Uso direto de us $_POST Superglobal detectado.

Uso direto de us $_REQUEST Superglobal detectado.

Uso direto de us $_SESSION Superglobal detectado.

Uso direto de us $GLOBALS Superglobal detectado.

Recomendação:Use correspondente wrapper objetos, a fim de obter um cookie de sessão ou de solicitação de dados.

Função set_magic_quotes_runtime() foi preterido

Recomendação:Funções não devem ser utilizados, pois eles podem ser removidos a qualquer momento, a partir de uma versão futura.[Provavelmente um erro genérico para todas as substituições]

Idêntico operador === não é utilizado para testar o valor de retorno da função strpos

Idêntico operador === não é utilizado para testar o valor de retorno da função de stripos

Recomendação:Use a = operador== para testar o valor de retorno dessa função.

Uso incorreto de volta citação constante de cadeia de caracteres.De volta aspas devem ser sempre de dentro de cadeias de caracteres.

Recomendação:[nenhuma recomendação.Eu imagino que este é impedir exec através de crases devem.]

Falta o _isAllowed() método ACL na [Nome da classe] de classe.

Recomendação:Muito cuidado gerenciar a configuração, gerenciamento e manuseio de privilégios.ACL recursos devem ser definidos na adminhtml.xml arquivo para cada adminhtml controlador e _isAllowed() o método deve ser implementado.

Espaço de nomes para [ExceptionClassName] classe não é especificado.

Recomendação:Especificar Exceção de espaço de nomes.

PHP erro de sintaxe:Chamada de tempo de passagem por referência foi removido

Recomendação:Correção de erro de sintaxe.[Este acompanha acima.Eu imagino que um semelhante erro genérico é dado para todas as outras PHP erros de sintaxe]

Possível Magento 2 design de violação.Detectado típico Magento 1 construção.

Recomendação:[Este vem com nenhuma recomendação, mas descreve código de classe de uso como Mage::blah ou Mage_blah_blah::blá é detectado - estas são as classes, que só existem no Magento 1 e não irá funcionar no Magento 2.Uma boa idéia é procurar o M2 de extensão para o regex Mage(\b|_) a pré-seleção para M1 usos.]

recurso é uma palavra reservada em PHP 7.

Recomendação:[Nenhuma recomendação.Basta mudar a palavra para algo mais deve funcionar.Eu imagino que este erro existe para todas as palavras reservadas.]

A abertura PHP tag deve ser o primeiro conteúdo no arquivo

Recomendação:Remover todos os caracteres antes da Tag de Abertura do PHP.

O uso de morrer construção de linguagem é desencorajado.

O uso de sair construção de linguagem é desencorajado.

Recomendação:setBody() objeto de resposta método deve ser usado.

O uso de eco construção de linguagem é desencorajado.

Uso de linguagem de impressão construir é desencorajado.

Recomendação:Arquitetura da extensão deve ser alterado de forma a evitar o uso de eco, cabeçalho, etc.em classes, considere o uso de setBody() método do objeto response.

O uso de eval() é desencorajado

Recomendação:Evitar o uso de eval().


Ao contrário destes erros, o que causa a sua extensão a ser rejeitado, atualmente, avisos listados apenas como cortesia, para ajudar a melhorar a sua extensão de código.Você NÃO será rejeitado a partir de análise técnica para avisos, no entanto, muitos não estão.

Obviamente, esta regra pode ser apertado no futuro, e o codesniffer conjunto de regras está sob constante revisão, para ver como muitos avisos que você pode resolver é sempre um bom plano.Os avisos também podem indicar problemas sistémicos com sua base de código.


Algumas razões para a rejeição de análise técnica no momento não aparecem no relatório on-line, e só são dadas no e-mail.

Coisas como copiar-colar e violações de malware detectado só vai ter mensagens mostradas no e-mail que você começar deixando você saber que a sua extensão não foi aceito, então leia o e-mail com cuidado.

Um arquivo destes e-mails não é actualmente visível a partir do portal do desenvolvedor, por isso, se você excluí-los sem ler, ou arquivá-los para o lixo, então eles foram embora.

Magento Nível 1 revisores, por vezes, colocar mais informações neste e-mail, apenas útil coisas que eles achavam que você pode querer saber sobre, como "esta matriz chave 'server' provavelmente deve ser o 'servidor'," ou as razões para a sua rejeição e sugestões sobre como resolver rapidamente, como "Você copiou um todo Magento núcleo de arquivo e apenas mudou o classpath:você pode substituir esta com uma classe de configuração de preferência em vez disso.", ou "Você copiou um todo Magento núcleo de arquivo só para mudar um par de funções públicas:você pode usar plugins para esta vez."

Se você não ler isto, e basta olhar para o codesniffer relatório, você pode acabar tentando corrigir os problemas errados.


Observe que o unescaped output detected mensagem NÃO deve ser desviado usando o @escapeNotVerified ou @noEscape comentários.Este provavelmente será permitida em futuras versões do Magento.Em vez disso, use um dos seguintes procedimentos:

  • Qualquer estático de seqüência de caracteres entre aspas simples.
  • Um static string entre aspas duplas, sem inline variáveis.
  • [recomendado] Um valor escapou com um dos escapar métodos de \Magento\Framework\View\Element\AbstractBlock (escapeHtml(), escapeUrl(), escapeQuote(), escapeXssInUrl()).
  • Um valor convertido para um valor numérico do tipo (pelo menos bool e int, talvez outros?)
  • Qualquer chamada de método com a palavra "html" no nome, como printBannerHtml().Não abuse de um presente!Certifique-se de que o seu blahHtml() método realmente corretamente escapar de todas as variáveis.

Erro:

Escape de saída detectado

Erro no .arquivo .phtml

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

Você gritar usar:

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

Consulte os Modelos de XSS segurança para http://devdocs.magento.com/guides/v2.0/frontend-dev-guide/templates/template-security.html#escape-functions-for-templates

Licenciado em: CC-BY-SA com atribuição
Não afiliado a magento.stackexchange
scroll top