Jest coś takiego jak coding standard
dla Magento 1 , nazywanego ECG
tam , gdzie należy unikać wielu rzeczy lub metod, których nie należy stosować.
Spróbujmy utworzyć listę, która obejmie wszystkie przypadki, które zgłaszają „błędy” lub „ostrzeżenia” w kodzie.
Poniżej znajduje się lista wszystkich możliwych ostrzeżeń. Będę aktualizować ten post w regularnych odstępach czasu i link do podanych i pozytywnych odpowiedzi.
Uwaga: staraj się unikać duplikatów odpowiedzi;)
Pobierz: https://github.com/magento-ecg/coding-standard
EKG wącha
Klasy
Klasy Mysql4 są przestarzałe.
- Jak obsługiwać przestarzałe klasy „Mysql4” podczas przepisywania modeli zasobów
- Moduł Magento 1.9 dziwnie się psuje przy zmianie folderu zasobów z Mysql4 na Resource
Bezpośrednie tworzenie instancji obiektów (klasa% s) jest odradzane w Magento.
protected $disallowedClassPrefixes = array(
'Mage_',
'Enterprise_',
);
...
PHP
Używanie goto jest odradzane.
...
Przestrzeń nazw dla klasy „”. $ WyjątekClassName. ”„ Nie jest określona.
...
Wykryto członka klasy prywatnej.
...
Wykryto członka klasy prywatnej.
...
Wydajność
Niepotrzebne ładowanie zbioru danych Magento. Zamiast tego użyj metody getSize ().
Funkcja fetchAll () może być nieefektywna w przypadku dużych zestawów danych.
...
Funkcja getFirstItem () nie ogranicza wyniku ładowania kolekcji do jednego elementu.
- GetFirstItem - https://magento.stackexchange.com/a/179309/46249
Wykryto w pętli funkcję obliczania rozmiaru tablicy% s
Modelowa metoda LSD% s wykryta w pętli
Metoda ładowania% s wykryta w pętli
protected $countFunctions = array(
'sizeof',
'count'
);
protected $modelLsdMethods = array(
'load',
'save',
'delete'
);
Bezpieczeństwo
Brak metody% s () ACL w klasie% s.
const PARENT_CLASS_NAME = 'Mage_Adminhtml_Controller_Action';
const REQUIRED_ACL_METHOD_NAME = '_isAllowed';
...
public $forbiddenFunctions = array(
'^is_dir' => null,
'^is_file$' => null,
'^pathinfo$' => null,
);
...
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,
);
- ...
- curl_: - https://magento.stackexchange.com/a/178642/46249
- file_exists - https://magento.stackexchange.com/a/178641/46249
- ...
Wykryto instrukcję „% s”. Manipulowanie plikami jest odradzane.
... Instrukcja nie jest funkcją, nawiasy nie są wymagane.
... Przekazywanie adresów URL jest zabronione.
... Łączenie jest zabronione.
... Zmienne wewnątrz są niepewne.
public $urlPattern = '#(https?|ftp)://.*#i';
...
Niepoprawne użycie stałej ciągu znaków cudzysłowu. Cudzysłowy powinny zawsze znajdować się w ciągach znaków.
Używanie konstrukcji języka% s jest odradzane.
return array(
T_EXIT,
T_ECHO,
T_PRINT,
T_BACKTICK
);
...
Wykryto bezpośrednie użycie% s Superglobal.
public $superGlobalErrors = array(
'$GLOBALS',
'$_GET',
'$_POST',
'$_SESSION',
'$_REQUEST',
'$_ENV'
);
public $superGlobalWarning = array(
'$_FILES',
'$_COOKIE',
'$_SERVER',
);
Sql
Możliwe wykrycie surowej instrukcji SQL% s
public $statements = array(
'SELECT',
'UPDATE',
'INSERT',
'CREATE',
'DELETE',
'ALTER',
'DROP'
);
public $queryFunctions = array(
'query',
'raw_query'
);
...
Wykryto możliwą powolną instrukcję SQL% s
Wykryto możliwą powolną metodę SQL% s
public $adapterMethods = array(
'group',
'having',
'distinct',
'addLikeEscape',
'escapeLikeValue',
'union',
'orHaving',
);
public $rawStatements = array(
'GROUP BY',
'HAVING',
'DISTINCT',
'LIKE',
'UNION',
);
...
Smyczki
Możliwe wykonywalne wyrażenie regularne w% s. Upewnij się, że wzorzec nie zawiera modyfikatora „e”
public $functions = array(
'preg_replace',
);
...
Użycie operatora + do połączenia dwóch wykrytych ciągów
...
Identyczny operator === nie jest używany do testowania wartości zwracanej funkcji% s
public $functions = array(
'strpos',
'stripos',
);
- http://php.net/manual/en/function.strpos.php#refsect1-function.strpos-examples
- http://php.net/manual/en/function.stripos.php#refsect1-function.stripos-examples
Powiązane pytania i odpowiedzi dotyczące najlepszych praktyk
Odpowiedzi:
Zabroniona funkcja
plik istnieje()
Używanie funkcji file_exists () jest zabronione
błędny:
poprawny:
lub
źródło
GetFirstItem
Funkcja getFirstItem () nie ogranicza wyniku ładowania kolekcji do jednego elementu.
błędny:
poprawny:
Zastosuj limit przed pobraniem danych.
lub
Przykłady:
Kolekcja z 750 produktami ...
Bez ograniczeń przed:
Przy użyciu
getSelect()->limit(1)
:Z użyciem
setPageSize(1, 1)
Uwaga:
To ostrzeżenie będzie nadal pojawiać się, nawet jeśli wcześniej ograniczysz swoją kolekcję. Aby pozbyć się tej wiadomości, użyj
$collection->getLastItem()
zamiast tego.źródło
Data access method LIMIT detected outside of Resource Model
gdy używam limitu`Zabroniona funkcja
curl_xyz
Używanie funkcji curl_init (), curl_setopt (), curl_exec (), curl_close () jest zabronione
błędny:
poprawny:
źródło
Uncaught Error: Class 'Custom\Rma\Helper\Varien_Http_Adapter_Curl' not found
. Jak korzystać z klasy, znalazłem ją u sprzedawcy, ale bez powodzenia.