С новым Magento Marketplace представленное расширение проходит через несколько состояний проверки, чтобы быть утвержденным и доступным через Marketplace.
Одним из них является технический обзор, из которого вы можете получить технический отчет, подобный следующему:
Как вы можете видеть, 200+ предупреждений, черт возьми, напугало меня, есть ли какой-нибудь ресурс, который поможет исправить каждое предупреждение, кроме списка, доступного в документации: http://docs.magento.com/marketplace/user_guide/extensions/ review-code-validation.html ?
magento2
extensions
marketplace
Рафаэль в цифровом пианизме
источник
источник
Ответы:
После часа просмотра отчета я составил следующий список, который может быть полезен всем, на мой взгляд.
Я постараюсь держать его в курсе, как только найду больше предупреждений / ошибок:
Предупреждения
Или
Это те, которые я видел больше всего, они говорят сами за себя, это хорошая практика - держать строки кода маленькими, чтобы сохранить чистый и читаемый код.
Вы вызвали функцию, которая получает параметры и не добавили пробел после запятой. Пример:
strrchr($bla,".")
должно бытьstrrchr($bla, ".")
Это означает, что вы вернули строку перед открывающей скобкой этих операторов PHP.
Пример неправильного синтаксиса с оператором if / else:
Должно быть
В большинстве случаев это происходит в конструкторе, где вы объявляете что-то вроде этого:
Принимая во внимание, что это должно быть:
Происходит в большинстве случаев в начале файла, это связано с тем, как ваша IDE кодирует возвращаемый символ.
Каждая переменная должна использовать формат верблюд шапки, так
$your_variable
должно быть$yourVariable
Избегайте использования чисел в ваших переменных
Вы не должны использовать встроенные управляющие структуры, такие как:
Вы должны использовать:
Вы возвратили строку при объявлении класса:
Вы должны держать открывающую скобку на той же строке:
Вы должны добавить начальное подчеркивание в свои защищенные и закрытые переменные-члены:
$_yourVariable
В противоположность этим двум, если вы добавите подчеркивание в вашей публичной переменной, вы можете получить:
Вы передали параметр методу, но никогда не используете его.
Вы добавили слишком много отступов в параметры объявления вашей функции:
Должно быть:
Вы переопределяете метод без добавления модификаций, например:
Вы используете
load()
метод внутри цикла, который не рекомендуется и его следует избегать.Скорее всего, ваш код выглядит так:
Если вы загружаете модель в цикл, это действительно очень плохо с точки зрения производительности. Если вам нужно получить только несколько атрибутов, вы должны использовать коллекции.
Если вы не знакомы с цикломатической сложностью, я предлагаю вам прочитать эту статью: https://pdepend.org/documentation/software-metrics/cyclomatic-complexity.html . Это предупреждение в основном означает, что в вашей функции слишком много циклов и условий.
Это вызвано тем, что вы создаете экземпляр объекта напрямую, вызывая класс, например:
Вы должны использовать внедрение зависимостей или, в крайнем случае, менеджер объектов.
Один из ваших комментариев содержит следующий
@TODO
флаг.Вы создали условие, которое кажется всегда истинным или ложным.
Например:
ошибки
Вы пропускаете
use Path\To\Class;
утверждение в начале вашего класса.источник
You should keep the opening brace on the same line:
разве это не наоборот? Кстати,Использование Codesniffer с набором правил MEQP1 или MEQP2 (в зависимости от вашей версии Magento) даст вам представление о наборе правил Magento: https://github.com/magento/marketplace-eqp/tree/master/
Этот набор правил и тот, который выполняется в процессе отправки Marketplace, не всегда идеально синхронизированы (хотя, конечно, это идеальный вариант), поэтому вы можете получить отклонение из-за ошибок codeniffer, даже если он передает последнюю версию на Github.
Некоторые из наиболее распространенных ошибок "серьезности-10" (единственные ошибки, для которых ваше расширение будет отклонено), и их перечисленные рекомендации включают:
Рекомендация: удалите закрывающий тег PHP.
Рекомендация: прочтите документацию по ссылкам в PHP 5 и выполните рефакторинг вашего кода. Ссылки: http://php.net/manual/en/language.references.pass.php
Рекомендация: используйте соответствующие объекты-оболочки для получения файлов cookie, сеанса или запроса.
Рекомендация: устаревшие функции не должны использоваться, поскольку они могут быть удалены в любой момент из будущей версии. [Вероятно, общая ошибка для всех устареваний]
Рекомендация: используйте оператор === для проверки возвращаемого значения этой функции.
Рекомендация: [нет отдельной рекомендации. Я полагаю, что это должно предотвратить exec через кавычки.]
Рекомендация: очень тщательно управляйте настройкой, управлением и обработкой привилегий. Ресурс ACL должен быть определен в файле adminhtml.xml для каждого контроллера adminhtml, и должен быть реализован метод _isAllowed ().
Рекомендация: укажите пространство имен Exception.
Рекомендация: исправьте синтаксическую ошибку. [Этот сопровождает вышесказанное. Я полагаю, что аналогичная общая ошибка дается для всех других ошибок синтаксиса PHP]
Рекомендация: [Это не дает никаких рекомендаций, но описывает код, в котором обнаружено использование классов, таких как Mage :: blah или Mage_blah_blah :: blah - это классы, которые существуют только в Magento 1 и не будут работать в Magento 2. Хорошей идеей является найдите в своем расширении M2 регулярное выражение
Mage(\b|_)
для предварительной проверки использования M1.]Рекомендация: [Нет отдельной рекомендации. Простое переименование слова во что-то другое должно работать. Я полагаю, что эта ошибка существует для всех зарезервированных слов.]
Рекомендация: удалите все символы перед открывающим тегом PHP.
Рекомендация: следует использовать метод объекта ответа setBody ().
Рекомендация: архитектура расширения должна быть изменена, чтобы избежать использования echo, header и т. Д. В классах, рассмотрите возможность использования метода setBody () объекта ответа.
Рекомендация: избегайте использования eval ().
В отличие от этих ошибок, которые приводят к отклонению вашего расширения, предупреждения в настоящее время перечислены просто как любезность, чтобы помочь улучшить код вашего расширения. Вы НЕ будете отклонены от технического обзора для предупреждений, сколько бы они ни были.
Конечно, в будущем это правило может быть ужесточено, и набор правил codeniffer постоянно пересматривается, поэтому определение количества предупреждений, которые вы можете разрешить, всегда является хорошим планом. Предупреждения могут также указывать на системные проблемы с вашей кодовой базой.
Некоторые причины отклонения от технического обзора в настоящее время не отображаются в онлайн-отчете и приводятся только в электронном письме.
Такие вещи, как нарушения копирования-вставки и обнаруженные вредоносные программы, будут содержать только сообщения, отображаемые в электронном письме, которое вы получите, сообщая, что ваше расширение не было принято, поэтому внимательно прочитайте письмо .
Архив этих электронных писем в настоящее время не виден на портале для разработчиков, поэтому, если вы удалите их, не читая, или отправите их на нежелательную почту, они исчезнут.
Рецензенты Magento 1-го уровня иногда помещают дополнительную информацию в это электронное письмо, либо просто полезные вещи, о которых, как они думали, вы, возможно, захотите узнать, например, «этот ключ массива« sever », вероятно, должен быть« сервером »», либо обоснования их отклонения и предложения о том, как его быстро решить, например: «Вы скопировали весь файл ядра Magento и просто изменили путь к классу: вместо этого вы можете заменить его настройкой предпочтения класса». или «Вы скопировали весь файл ядра Magento просто для изменения пары публичные функции: вместо этого вы можете использовать плагины ".
Если вы не читаете их и просто просматриваете отчет codeniffer, вы можете попытаться исправить неправильные проблемы.
Обратите внимание, что
unescaped output detected
сообщение НЕ должно быть уклонено с помощью комментариев@escapeNotVerified
или@noEscape
. Это, вероятно, будет запрещено в будущих версиях Magento. Вместо этого используйте одно из следующего:\Magento\Framework\View\Element\AbstractBlock
(escapeHtml()
,escapeUrl()
,escapeQuote()
,escapeXssInUrl()
).printBannerHtml()
. Не злоупотребляйте этим! Убедитесь, что вашblahHtml()
метод действительно корректно экранирует все переменные.источник
Ошибка:
Ошибка в .phtml файле
Вы кричите использовать:
См. Безопасность шаблонов XSS для http://devdocs.magento.com/guides/v2.0/frontend-dev-guide/templates/template-security.html#escape-functions-for-templates
источник
@noEscape
и@escapeNotValidated
таким образом: если вы это сделаете, они, скорее всего, будут устаревшими, а затем запрещенными системой MEQP. Смотрите в нижней части моего ответа для широкого спектра лучших способов избежать ваших данных.