Magento 2: исключить классы из генерирующих перехватчиков

9

В Magento 2 (бета-версия 9 и выше) вы можете запустить эту команду, php bin/magento setup:di:compileи все перехватчики, фабрики и прокси-серверы (и, возможно, другие) будут сгенерированы в var/generationпапке для всех классов, которые есть в вашем экземпляре magento.
Это полезно для реальных сред, поскольку в противном случае упомянутые выше классы будут генерироваться во время выполнения, когда они необходимы, и могут влиять на производительность.
Есть ли способ исключить некоторые классы из этого скрипта, чтобы при запуске команды не создавались перехватчики?
Как пример: я хочу, чтобы контроллер Magento\Backend\Controller\Adminhtml\Dashboard\RefreshStatisticsне генерировал перехватчики.

Мариус
источник
зачем вам это?
Антон Криль
@AntonKril. Хватит задавать вопросы и дай мне решение: D. Теперь серьезно, я пытаюсь удалить некоторые модули, и при этом происходит setup:di:compileсбой, потому что некоторые родительские классы отсутствуют. Классы, которые расширяют эти отсутствующие классы, все еще существуют, но они не используются приложением. И я не могу удалить их, так как они находятся в модулях, которые мне нужны. См. Полное объяснение ниже: magento.stackexchange.com/questions/69040/…
Мариус

Ответы:

7

для запуска из cli хотя бы в более ранних версиях есть exclude-patternпараметр. Он был добавлен, чтобы избежать проблем, когда класс не может быть обработан правильно, как это происходит, например, с классами magento1. Команды и аргументы могли быть изменены путем преобразования их в консольные команды.

Но я не уверен, какова ваша цель, поэтому я не могу сказать, является ли это хорошим решением для использования.

Flyingmana
источник
Вот что я пытаюсь сделать. Я удаляю некоторые модули, чтобы посмотреть, как далеко я могу зайти. Среди этих модулей есть Reportмодуль. Но из-за тесной связи между отчетами и модулем Backend все еще есть классы в модуле backend, которые зависят от классов модуля отчета. Я нашел способ не использовать их, но поскольку команда di анализирует файлы, она проходит через «игнорируемые» классы и пытается создать перехватчики. Но это не удается, потому что родительский класс, Magento\Backend\Controller\Adminhtml\Dashboard\RefreshStatisticsнапример, не существует. Поэтому мне нужен способ исключить это.
Мариус
это показывает, что в консольном командном подходе нет exclude-patternparam. Или, по крайней мере, я не нашел его. Я заглянул внутрь DiCompileCommand::configure.
Мариус
Я вижу, вы могли бы добавить Проблема, запрашивающую эту функциональность, ссылающуюся на этот PR: github.com/magento/magento2/pull/986, или использовать там набор изменений, чтобы проверить, как добавить его временно для вашей локальной сборки.
Flyingmana