Использование Codesniffer с набором правил MEQP1 или MEQP2 (в зависимости от вашей версии Magento) даст вам представление о наборе правил Magento: https://github.com/magento/marketplace-eqp/tree/master/
Этот набор правил и тот, который выполняется в процессе отправки Marketplace, не всегда идеально синхронизированы (хотя, конечно, это идеальный вариант), поэтому вы можете получить отклонение из-за ошибок codeniffer, даже если он передает последнюю версию на Github.
Некоторые из наиболее распространенных ошибок "серьезности-10" (единственные ошибки, для которых ваше расширение будет отклонено), и их перечисленные рекомендации включают:
Закрывающий тег не разрешен в конце файла PHP
Рекомендация: удалите закрывающий тег PHP.
Переадресация вызовов по ссылке запрещена
Рекомендация: прочтите документацию по ссылкам в PHP 5 и выполните рефакторинг вашего кода. Ссылки: http://php.net/manual/en/language.references.pass.php
Обнаружено прямое использование $ _ENV Superglobal.
Обнаружено прямое использование $ _GET Superglobal.
Обнаружено прямое использование $ _POST Superglobal.
Обнаружено прямое использование $ _REQUEST Superglobal.
Обнаружено прямое использование $ _SESSION Superglobal.
Обнаружено прямое использование $ GLOBALS Superglobal.
Рекомендация: используйте соответствующие объекты-оболочки для получения файлов cookie, сеанса или запроса.
Функция set_magic_quotes_runtime () устарела
Рекомендация: устаревшие функции не должны использоваться, поскольку они могут быть удалены в любой момент из будущей версии. [Вероятно, общая ошибка для всех устареваний]
Идентичный оператор === не используется для проверки возвращаемого значения функции strpos
Идентичный оператор === не используется для проверки возвращаемого значения функции stripos
Рекомендация: используйте оператор === для проверки возвращаемого значения этой функции.
Неправильное использование строки обратной кавычки. Обратные кавычки всегда должны быть внутри строк.
Рекомендация: [нет отдельной рекомендации. Я полагаю, что это должно предотвратить exec через кавычки.]
Отсутствует метод ACL _isAllowed () в классе [ClassName].
Рекомендация: очень тщательно управляйте настройкой, управлением и обработкой привилегий. Ресурс ACL должен быть определен в файле adminhtml.xml для каждого контроллера adminhtml, и должен быть реализован метод _isAllowed ().
Пространство имен для класса [ExceptionClassName] не указано.
Рекомендация: укажите пространство имен Exception.
Ошибка синтаксиса 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 ().
Использование эхо-языковой конструкции не рекомендуется.
Использование конструкции языка печати не рекомендуется.
Рекомендация: архитектура расширения должна быть изменена, чтобы избежать использования echo, header и т. Д. В классах, рассмотрите возможность использования метода setBody () объекта ответа.
Использование eval () не рекомендуется
Рекомендация: избегайте использования eval ().
В отличие от этих ошибок, которые приводят к отклонению вашего расширения, предупреждения в настоящее время перечислены просто как любезность, чтобы помочь улучшить код вашего расширения. Вы НЕ будете отклонены от технического обзора для предупреждений, сколько бы они ни были.
Конечно, в будущем это правило может быть ужесточено, и набор правил codeniffer постоянно пересматривается, поэтому определение количества предупреждений, которые вы можете разрешить, всегда является хорошим планом. Предупреждения могут также указывать на системные проблемы с вашей кодовой базой.
Некоторые причины отклонения от технического обзора в настоящее время не отображаются в онлайн-отчете и приводятся только в электронном письме.
Такие вещи, как нарушения копирования-вставки и обнаруженные вредоносные программы, будут содержать только сообщения, отображаемые в электронном письме, которое вы получите, сообщая, что ваше расширение не было принято, поэтому внимательно прочитайте письмо .
Архив этих электронных писем в настоящее время не виден на портале для разработчиков, поэтому, если вы удалите их, не читая, или отправите их на нежелательную почту, они исчезнут.
Рецензенты Magento 1-го уровня иногда помещают дополнительную информацию в это электронное письмо, либо просто полезные вещи, о которых, как они думали, вы, возможно, захотите узнать, например, «этот ключ массива« sever », вероятно, должен быть« сервером »», либо обоснования их отклонения и предложения о том, как его быстро решить, например: «Вы скопировали весь файл ядра Magento и просто изменили путь к классу: вместо этого вы можете заменить его настройкой предпочтения класса». или «Вы скопировали весь файл ядра Magento просто для изменения пары публичные функции: вместо этого вы можете использовать плагины ".
Если вы не читаете их и просто просматриваете отчет codeniffer, вы можете попытаться исправить неправильные проблемы.
Обратите внимание, что unescaped output detected
сообщение НЕ должно быть уклонено с помощью комментариев @escapeNotVerified
или @noEscape
. Это, вероятно, будет запрещено в будущих версиях Magento. Вместо этого используйте одно из следующего:
- Любая статическая строка в одинарных кавычках.
- Статическая строка в двойных кавычках, без встроенных переменных.
- [рекомендуется] значение А отделался одним из методов эвакуации из
\Magento\Framework\View\Element\AbstractBlock
( escapeHtml()
, escapeUrl()
, escapeQuote()
, escapeXssInUrl()
).
- Значение, приведенное к числовому типу (по крайней мере, bool и int, может быть, другие?)
- Любой вызов метода со словом "html" в названии, например
printBannerHtml()
. Не злоупотребляйте этим! Убедитесь, что ваш blahHtml()
метод действительно корректно экранирует все переменные.