Використання Codesniffer з набором правил MEQP1 або MEQP2 (залежно від вашої версії Magento) дасть вам уявлення про набір правил Magento: https://github.com/magento/marketplace-eqp/tree/master/
Цей набір правил і той, що працює в процесі подання на Marketplace, НЕ завжди ідеально синхронізований (хоча, звичайно, це ідеально), тому ви можете відхилити помилки кодування, навіть якщо він передає останню версію на Github.
Деякі з найбільш поширених помилок "тяжкість-10" (єдині помилки, через які ваше розширення буде відхилено), та їх перелічені рекомендації включають:
Закриваючий тег не дозволяється в кінці файлу PHP
Рекомендація: Видаліть тег закриття PHP.
Часові дзвінки, що проходять через посилання, заборонені
Рекомендація: Прочитайте документацію щодо посилань у PHP 5 та перефактуруйте свій код. Список літератури: http://php.net/manual/en/language.references.pass.php
Пряме використання виявленого суперглобального $ _ENV.
Пряме використання виявленого суперглобального $ _GET.
Пряме використання виявленого суперглобального $ _POST.
Пряме використання виявленого суперглобального $ _REQUEST.
Пряме використання виявленого суперглобального $ _SESSION.
Виявлено пряме використання $ GLOBALS Superglobal.
Рекомендація: Використовуйте відповідні об’єкти обгортки для отримання файлів cookie, сеансу чи запиту.
Функція set_magic_quotes_runtime () застаріла
Рекомендація: застарілі функції не слід використовувати, оскільки вони можуть бути вилучені будь-коли з майбутньої версії. [Можливо, загальна помилка для всіх депресія]
Ідентичний оператор === не використовується для перевірки значення повернення функції strpos
Ідентичний оператор === не використовується для тестування зворотного значення функції смуга
Рекомендація: Використовуйте оператор === для тестування повернутого значення цієї функції.
Неправильне використання постійної постійної рядка цитати. Зворотні лапки повинні бути завжди в рядках.
Рекомендація: [немає окремої рекомендації. Я думаю, що це запобігання виконанню за допомогою зворотних цитат.]
Відсутній метод ACL _isAllowed () у класі [ClassName].
Рекомендація: Дуже ретельно керуйте налаштуванням, керуванням та керуванням привілеями. Ресурс ACL повинен бути визначений у файлі adminhtml.xml для кожного контролера adminhtml, а метод _isAllowed () повинен бути реалізований.
Простір імен для класу [ExceptionClassName] не вказано.
Рекомендація: Вкажіть простір імен виключень.
Помилка синтаксису PHP: Пропускний посилання часу виклику видалено
Рекомендація: Виправити помилку синтаксису. [Цей супроводжує вищесказане. Я думаю, що аналогічна загальна помилка задана для всіх інших помилок синтаксису PHP]
Можливе порушення дизайну Magento 2. Виявлено типову конструкцію Magento 1.
Рекомендація: [Це не містить рекомендацій, але описує код, де виявлено використання класу, наприклад Mage :: blah або Mage_blah_blah :: blah - це класи, які існують лише в Magento 1 і не працюватимуть у Magento 2. Хороша ідея - шукайте розширення M2 для регулярного вираження, Mage(\b|_)
щоб попередньо перевірити його на використання M1.]
ресурс - це зарезервоване слово в PHP 7.
Рекомендація: [Без окремих рекомендацій. Просто перейменування слова на щось інше повинно працювати. Я думаю, що ця помилка існує для всіх зарезервованих слів.]
Відкриваючий тег PHP повинен бути першим вмістом у файлі
Рекомендація: Видаліть усі символи перед тим, як відкрити тег PHP.
Використання конструкції мови вмирати не рекомендується.
Використання конструкції мови виходу не рекомендується.
Рекомендація: слід використовувати метод об'єкта відповіді setBody ().
Використання конструкції мови ехо не рекомендується.
Використання конструкції мови друку не рекомендується.
Рекомендація: Архітектуру розширення слід змінити, щоб уникнути використання ехо, заголовка тощо у класах, розглянути можливість використання методу setBody () об'єкта відповіді.
Використання eval () не рекомендує
Рекомендація: Уникайте використання eval ().
На відміну від цих помилок, які призводять до відхилення вашого розширення, попередження в даний час перераховані лише як люб’язно, щоб покращити код розширення. Ви НЕ буде відмовлено в технічному огляді за попередженнями, скільки б їх не було.
Звичайно, це правило може бути посилено в майбутньому, і набір правил кодового коду постійно переглядається, тому побачити, скільки попереджень ви можете вирішити, завжди є хорошим планом. Попередження також можуть вказувати на системні проблеми з вашою кодовою базою даних.
Деякі причини відмови від технічного огляду наразі не відображаються в онлайн-звіті та надаються лише в електронній пошті.
Такі речі, як порушення копіювання вставки та виявлені зловмисні програми, матимуть лише повідомлення, які відображаються в електронному листі, яке ви повідомляєте, що ваше розширення не було прийнято, тому уважно читайте електронний лист .
Архів цих електронних листів наразі не видно на порталі розробників, тому якщо ви видалите їх, не читаючи, або занесіть їх у небажану пошту, то їх уже немає.
Рецензенти Magento Level 1 іноді містять додаткову інформацію в цьому електронному листі, або просто корисні речі, про які вони думають, що ви могли б знати, як-от "ця клавіша масиву" sever ", ймовірно, повинна бути" сервером ", або обґрунтування їх відхилення та пропозицій про те, як швидко його вирішити, як-от "Ви скопіювали цілий основний файл Magento і просто змінили classpath: ви можете замінити це замість налаштування параметрів класу.", або "Ви скопіювали весь основний файл Magento лише для зміни пари загальнодоступні функції: ви можете використовувати плагіни для цього. "
Якщо ви їх не читаєте, а просто подивитесь на звіт про кодовий кодекс, ви, можливо, спробуєте виправити неправильні проблеми.
Зауважте, що unescaped output detected
повідомлення НЕ слід уникати за допомогою @escapeNotVerified
або @noEscape
коментарів. Можливо, це буде заборонено в майбутніх версіях Magento. Замість цього скористайтеся одним із наступних дій:
- Будь-яка статична рядок в одиничних лапках.
- Статичний рядок у подвійних лапки, без вбудованих змінних.
- [Рекомендується] значення А відбувся одним з методів евакуації з
\Magento\Framework\View\Element\AbstractBlock
( escapeHtml()
, escapeUrl()
, escapeQuote()
, escapeXssInUrl()
).
- Значення, подане на числовий тип (принаймні, bool та int, можливо, інші?)
- Будь-який виклик методу зі словом "html" у назві, як
printBannerHtml()
. Не зловживайте цим! Переконайтеся, що ваш blahHtml()
метод дійсно правильно уникає всіх змінних.