Conformidade com o ECG: Como fazer?

10

Existe algo como a coding standardpara o Magento 1 , chamado ECGonde várias coisas devem ser evitadas ou métodos que não devem ser usados.

Vamos tentar criar uma lista que cubra todos os casos que geram "erros" ou "aviso" no seu código.

Abaixo, você encontrará uma lista com todos os avisos possíveis. Atualizo este post em intervalos regulares e vinculo a respostas dadas e votadas.

Nota: tente evitar respostas duplicadas;)

Faça o download: https://github.com/magento-ecg/coding-standard


Farejadores de ECG

Aulas

Mysql4

As classes do Mysql4 são obsoletas.

Instanciação de Objetos

A instanciação direta de objetos (classe% s) é desencorajada no Magento.

protected $disallowedClassPrefixes = array(
    'Mage_',
    'Enterprise_',
);

...

PHP

Vamos para

O uso de goto é desencorajado.

...

Namespace

O espaço para nome da classe "'. $ ExceptionClassName.'" Não está especificado.

...

Membro da classe privada

Membro da classe privada detectado.

...

Var

Membro da classe privada detectado.

...

atuação

Contagem de coleções

Carregamento desnecessário de uma coleção de dados Magento. Use o método getSize ().

FetchAll

fetchAll () pode ser ineficiente na memória para grandes conjuntos de dados.

...

GetFirstItem

getFirstItem () não limita o resultado do carregamento da coleção a um item.

Ciclo

Função de cálculo de tamanho de matriz% s detectada em loop

Método% s do modelo LSD detectado em loop

Método% s de carregamento de dados detectado em loop

protected $countFunctions = array(
    'sizeof',
    'count'
);
protected $modelLsdMethods = array(
    'load',
    'save',
    'delete'
);

Segurança

Acl

Falta o método ACL% s () na classe% s.

const PARENT_CLASS_NAME = 'Mage_Adminhtml_Controller_Action';
const REQUIRED_ACL_METHOD_NAME = '_isAllowed';

...

Função desencorajada

public $forbiddenFunctions = array(
    '^is_dir' => null,
    '^is_file$' => null,
    '^pathinfo$' => null,
);

...

Função Proibida

public $forbiddenFunctions = array(
    '^assert$' => null,
    '^bind_textdomain_codeset$' => null,
    '^bindtextdomain$' => null,
    '^bz.*$' => null,
    '^call_user_func$' => null,
    '^call_user_func_array$' => null,
    '^chdir$' => null,
    '^chgrp$' => null,
    '^chmod$' => null,
    '^chown$' => null,
    '^chroot$' => null,
    '^com_load_typelib$' => null,
    '^copy$' => null,
    '^create_function$' => null,
    '^curl_.*$' => null,
    '^cyrus_connect$' => null,
    '^dba_.*$' => null,
    '^dbase_.*$' => null,
    '^dbx_.*$' => null,
    '^dcgettext$' => null,
    '^dcngettext$' => null,
    '^dgettext$' => null,
    '^dio_.*$' => null,
    '^dirname$' => null,
    '^dngettext$' => null,
    '^domxml_.*$' => null,
    '^exec$' => null,
    '^fbsql_.*$' => null,
    '^fdf_add_doc_javascript$' => null,
    '^fdf_open$' => null,
    '^fopen$' => null,
    '^fsockopen$' => null,
    '^ftp_.*$' => null,
    '^fwrite$' => null,
    '^gettext$' => null,
    '^gz.*$' => null,
    '^header$' => null,
    '^highlight_file$' => null,
    '^ibase_.*$' => null,
    '^id3_set_tag$' => null,
    '^ifx_.*$' => null,
    '^image.*$' => null,
    '^imap_.*$' => null,
    '^ingres_.*$' => null,
    '^ircg_.*$' => null,
    '^ldap_.*$' => null,
    '^link$' => null,
    '^mail$' => null,
    '^mb_send_mail$' => null,
    '^mkdir$' => null,
    '^move_uploaded_file$' => null,
    '^msession_.*$' => null,
    '^msg_send$' => null,
    '^msql$' => null,
    '^msql_.*$' => null,
    '^mssql_.*$' => null,
    '^mysql_.*$' => null,
    '^odbc_.*$' => null,
    '^opendir$' => null,
    '^openlog$' => null,
    '^ora_.*$' => null,
    '^ovrimos_.*$' => null,
    '^parse_ini_file$' => null,
    '^parse_str$' => null,
    '^parse_url$' => null,
    '^parsekit_compile_string$' => null,
    '^passthru$' => null,
    '^pcntl_.*$' => null,
    '^posix_.*$' => null,
    '^pfpro_.*$' => null,
    '^pfsockopen$' => null,
    '^pg_.*$' => null,
    '^php_check_syntax$' => null,
    '^popen$' => null,
    '^print_r$' => null,
    '^printf$' => null,
    '^proc_open$' => null,
    '^putenv$' => null,
    '^readfile$' => null,
    '^readgzfile$' => null,
    '^readline$' => null,
    '^readlink$' => null,
    '^register_shutdown_function$' => null,
    '^register_tick_function$' => null,
    '^rename$' => null,
    '^rmdir$' => null,
    '^scandir$' => null,
    '^session_.*$' => null,
    '^set_include_path$' => null,
    '^set_ini$' => null,
    '^set_time_limit$' => null,
    '^setcookie$' => null,
    '^setlocale$' => null,
    '^setrawcookie$' => null,
    '^shell_exec$' => null,
    '^sleep$' => null,
    '^socket_.*$' => null,
    '^stream_.*$' => null,
    '^sybase_.*$' => null,
    '^symlink$' => null,
    '^syslog$' => null,
    '^system$' => null,
    '^touch$' => null,
    '^trigger_error$' => null,
    '^unlink$' => null,
    '^vprintf$' => null,
    '^mysqli.*$' => null,
    '^oci_connect$' => null,
    '^oci_pconnect$' => null,
    '^quotemeta$' => null,
    '^sqlite_popen$' => null,
    '^time_nanosleep$' => null,
    '^base64_decode$' => null,
    '^base_convert$' => null,
    '^basename$' => null,
    '^chr$' => null,
    '^convert_cyr_string$' => null,
    '^dba_nextkey$' => null,
    '^dns_get_record$' => null,
    '^extract$' => null,
    '^fdf_.*$' => null,
    '^fget.*$' => null,
    '^fread$' => null,
    '^fflush$' => null,
    '^get_browser$' => null,
    '^get_headers$' => null,
    '^get_meta_tags$' => null,
    '^getallheaders$' => null,
    '^getenv$' => null,
    '^getopt$' => null,
    '^headers_list$' => null,
    '^hebrev$' => null,
    '^hebrevc$' => null,
    '^highlight_string$' => null,
    '^html_entity_decode$' => null,
    '^ibase_blob_import$' => null,
    '^id3_get_tag$' => null,
    '^import_request_variables$' => null,
    '^ircg_nickname_unescape$' => null,
    '^ldap_get_values$' => null,
    '^mb_decode_mimeheader$' => null,
    '^mb_parse_str$' => null,
    '^mcrypt_decrypt$' => null,
    '^mdecrypt_generic$' => null,
    '^msg_receive$' => null,
    '^ngettext$' => null,
    '^ob_get_contents$' => null,
    '^ob_get_flush$' => null,
    '^rawurldecode$' => null,
    '^shm_get_var$' => null,
    '^stripcslashes$' => null,
    '^stripslashes$' => null,
    '^token_get_all$' => null,
    '^unpack$' => null,
    '^convert_uudecode$' => null,
    '^iconv_mime_decode$' => null,
    '^iconv_mime_decode_headers$' => null,
    '^iconv_mime_encode$' => null,
    '^iconv_set_encoding$' => null,
    '^php_strip_whitespace$' => null,
    '^addcslashes$' => null,
    '^addslashes$' => null,
    '^escapeshellarg$' => null,
    '^escapeshellcmd$' => null,
    '^gettype$' => null,
    '^var_dump$' => null,
    '^tempnam$' => null,
    '^realpath$' => null,
    '^linkinfo$' => null,
    '^lstat$' => null,
    '^stat$' => null,
    '^lchgrp$' => null,
    '^lchown$' => null,
    '^show_source$' => null,
    '^is_executable$' => null,
    '^is_link$' => null,
    '^is_readable$' => null,
    '^is_writable$' => null,
    '^is_writeable$' => null,
    '^is_uploaded_file$' => null,
    '^glob$' => null,
    '^ssh2_.*$' => null,
    '^delete$' => null,
    '^file.*$' => null,
);

Incluir arquivo

Instrução "% s" detectada. Manipulações de arquivos são desencorajadas.

... A instrução não é uma função, sem parênteses.

... Passar URLs é proibido.

... Concatenar é proibido.

... Variáveis ​​internas são inseguras.

public $urlPattern = '#(https?|ftp)://.*#i';

...

Construção de linguagem

Uso incorreto da constante de sequência de aspas posteriores. As aspas devem estar sempre dentro das strings.

O uso da construção de linguagem% s é desencorajado.

    return array(
        T_EXIT,
        T_ECHO,
        T_PRINT,
        T_BACKTICK
    );

...

Superglobal

Uso direto de% s Superglobal detectado.

public $superGlobalErrors = array(
    '$GLOBALS',
    '$_GET',
    '$_POST',
    '$_SESSION',
    '$_REQUEST',
    '$_ENV'
);
public $superGlobalWarning = array(
    '$_FILES',
    '$_COOKIE',
    '$_SERVER',
);

Sql

Consulta bruta

Possível instrução SQL bruta% s detectada

public $statements = array(
    'SELECT',
    'UPDATE',
    'INSERT',
    'CREATE',
    'DELETE',
    'ALTER',
    'DROP'
);
public $queryFunctions = array(
    'query',
    'raw_query'
);

...

Consulta lenta

Possível instrução SQL lenta% s detectada

Possível método SQL lento% s detectado

public $adapterMethods = array(
    'group',
    'having',
    'distinct',
    'addLikeEscape',
    'escapeLikeValue',
    'union',
    'orHaving',
);
public $rawStatements = array(
    'GROUP BY',
    'HAVING',
    'DISTINCT',
    'LIKE',
    'UNION',
);

...

Cordas

RegEx

Possível expressão regular executável em% s. Certifique-se de que o padrão não contenha o modificador "e"

public $functions = array(
    'preg_replace',
);

...

String Concat

Uso do operador + para concatenar duas seqüências detectadas

...

Posição da corda

Operador idêntico === não é usado para testar o valor de retorno da função% s

public $functions = array(
    'strpos',
    'stripos',
);

Perguntas e respostas relacionadas para as

sv3n
fonte
LOL sobre este post, você escreveu quase um doc :)
PЯINCƏ
@Prince alguém poderia ajudar um pouco para concluir isso: P
sv3n
Eu acho que não :) :) #
22417
alguma alternativa para stripcslashes ()? @ sv3n obrigado por tal pergunta descrição e respostas :)
Keyur Shah
@KeyurShah Não. Ignore o aviso ou tente evitar o "antes" :) Nesse caso, você o usa? Talvez adicione isso como pergunta?
sv3n

Respostas:

6

Função Proibida

o arquivo existe()

É proibido o uso da função file_exists ()

incorreta:

if (!file_exists($filePath)) {
    ...
}

corrigir:

$io = new Varien_Io_File();
if (!$io->fileExists($filePath)) {
    ...
}

ou

$validatorNot = new Zend_Validate_File_NotExists($path);
if ($validatorNot->isValid($file)) {
    ...
}
sv3n
fonte
5

GetFirstItem

getFirstItem () não limita o resultado do carregamento da coleção a um item.

incorreta:

$collection = Mage::getModel('catalog/category')
    ->load(41)
    ->getProductCollection()
    ->addAttributeToSelect('weight');

$product = $collection->getFirstItem();
$weight  = $product->getData('weight');

corrigir:

Aplique o limite antes de pegar os dados.

$collection->getSelect()->limit(1)

ou

$collection->setPageSize(1, 1)

Exemplos:

Coleção com 750 produtos ...

Sem limitar antes:

  • Total Incl. Tempo de parede (microseg): 2.116.522 microssegundos
  • Total Incl. CPU (microssegundos): 2.101.688 microssegundos
  • Total Incl. MemUse (bytes): 4.783.504 bytes
  • Total Incl. PeakMemUse (bytes): 4.363.112 bytes
  • Número de chamadas de função: 104.187

Com o uso getSelect()->limit(1):

  • Total Incl. Tempo de parede (microsseguro): 149.803 microssegundos
  • Total Incl. CPU (microssegundos): 131.405 microssegundos
  • Total Incl. MemUse (bytes): 2.384.840 bytes
  • Total Incl. PeakMemUse (bytes): 1.827.112 bytes
  • Número de chamadas de função: 5,327

Com o uso setPageSize(1, 1)

  • Total Incl. Tempo de parede (microseg): 155.025 microssegundos
  • Total Incl. CPU (microssegundos): 136.191 microssegundos
  • Total Incl. MemUse (bytes): 2.413.128 bytes
  • Total Incl. PeakMemUse (bytes): 1.856.064 bytes
  • Número de chamadas de função: 5.515

Nota:

Este aviso ainda será exibido, mesmo se você limitar sua coleção antes. Para se livrar dessa mensagem, use $collection->getLastItem().

sv3n
fonte
Estou recebendo Data access method LIMIT detected outside of Resource Modelao usar limit` #
Amit Patel
1
Aqui está mais detalhes
Amit Patel
5

Função Proibida

curl_xyz

É proibido o uso da função curl_init (), curl_setopt (), curl_exec (), curl_close ()

incorreta:

$ch = curl_init();
curl_setopt($connection, CURLOPT_HTTPHEADER, $header);
curl_setopt($connection, CURLOPT_POSTFIELDS, $request);
curl_setopt($connection, CURLOPT_URL, $url);
$response = curl_exec($ch);
curl_close($ch);

corrigir:

$options = array(
    CURLOPT_HTTPHEADER => $header,
    CURLOPT_POSTFIELDS => $request
);

$curl = new Varien_Http_Adapter_Curl();
$curl->setOptions($options);
$curl->write(Zend_Http_Client::GET, $url, Zend_Http_Client::HTTP_0);
$response = $curl->read();
$responseBody = Zend_Http_Response::extractBody($response);
$curl->close();
sv3n
fonte
Eu usei o código acima e está me dando erro Uncaught Error: Class 'Custom\Rma\Helper\Varien_Http_Adapter_Curl' not found. Como usar a classe que encontrei no fornecedor, mas sem sorte.
Nitin Pawar
@NitinPawar, você pode abrir uma nova pergunta? Algo parece estar errado com seu código.
sv3n