Как сделать так, чтобы команда symfony 4 была зарегистрирована только в среде разработчиков и отключена в prod? - PullRequest
1 голос
/ 12 мая 2019

В моем App есть вспомогательный класс App\Command\GenerateFixturesCommand, который предоставляет команду с именем my-nice-project:generate-fixtures.

Эта команда использует сервис моего собственного проекта с именем App\Services\CatalogFixtureGenerator, который генерирует 1000 произвольных PDF-документов для тестирования при разработке приложения.

Для этого этот сервис использует класс joshtronic\LoremIpsum, который требуется в composer только в dev. LoremIpsum - сторонняя библиотека. Требуется в соответствии с require-dev.

для композитора.

Итак, инъекция:

  1. Я управляю своим GenerateFixturesCommand.
  2. Перед этим система прозрачно находит мой CatalogFixtureGenerator и вводит его в команду.
  3. Перед этим система прозрачно находит стороннюю службу LoremIpsum, чтобы внедрить ее в службу генератора приборов.

Все подключено автоматически.

При развертывании на prod и выполнении composer install --no-dev --optimize-autoloader, конечно, класс LoremIpsum не устанавливается.

Но когда я очищаю кеш с помощью APP_ENV=prod php bin/console cache:clear, фреймворк находит команду и не может внедрить автонастроенные зависимости.

[WARNING] Some commands could not be registered:
In CatalogsFixtureGenerator.php line 26:
Class 'joshtronic\LoremIpsum' not found

Эта команда my-nice-project:generate-fixtures никогда не будет использоваться на рабочем сервере.

Вопрос

Как я могу "отключить" команду в prod?

Я имею в виду: как я могу сказать платформе, что класс GenerateFixturesCommand не должен быть загружен, ни его автосвязанные зависимости, и ни один из них не должен быть автоподключен в prod?

...