Руководство по правильному консольному приложению PHP Symfony
Погуглив по этой теме, я смог найти только официальную документацию по Symfony's Console Component и несколько руководств по быстрой сборке, но я хотел бы написать о создании настоящего масштабируемого консольного приложения, которое вы могли бы использовать в реальном производственном проекте. Я объясню причины, по которым мы делаем то или иное.
Мне нравится писать развязанный, многоразовый и как можно более сырой код, поэтому мы постараемся двигаться в этом направлении. Кроме того, мы воспользуемся преимуществами всех новых функций PHP 7. Помните, что это означает, что вам потребуется версия выше 7.1.
По сути, мы будем использовать только контейнер зависимостей и Консольный компонент Symfony и собираем их вместе. Должно быть довольно легко и просто. Лично мне нравится Zend's Service Manager, но вы можете использовать любой контейнер зависимостей, который вам нравится. Попробуйте выбрать компилирующую ПСР-11.
Начнем с инициализации определения композитора и запроса диспетчера служб:
composer init --require zendframework/zend-servicemanager && composer install
Мы также должны потребовать консольный компонент Symfony:
composer require symfony/console
Создадим консольную команду. Ничего особенного, просто стандартная команда Symfony:
Не забудьте автозагрузить свой код в composer.json:
“autoload”: { “psr-4”: { “App\\”: “src/App/” } }
Следующим шагом будет регистрация этой команды как службы. Мы хотим, чтобы это приложение могло масштабироваться, поэтому важно сохранить чистый контроль внедрения зависимостей.
Для простоты я буду использовать анонимные функции для фабрик, но в реальном проекте я бы использовал подходящие фабричные классы.
Я рекомендую сохранить все ваши команды в виде сервисов, даже если у них не будет зависимостей. Кроме того, мы создадим файл конфигурации, который возвращает все команды для приложения.
Осталось только создать фронт-контроллер. Нам просто нужно создать экземпляр новой консоли и зарегистрировать все наши команды, которые мы загрузим из нашего файла подтверждения и извлечем из нашего контейнера;)
Мы будем использовать файл без расширения:
Вот и все!
Вы должны иметь возможность запустить php application my:command
и увидеть My awesome command!
, напечатанный в консоли.
Некоторые люди расширили бы класс Symfony Application, но я думаю, что в этом нет необходимости, поскольку этот класс уже предназначен для расширения для этого варианта использования.
Вы можете создавать все необходимые вам команды и сервисы. Просто добавьте созданные вами команды в файл конфигурации. Это предназначено для масштабирования и стандартной компиляции PHP 7.
Я создал репозиторий Github, где вы можете увидеть полностью работающий пример.
Буду рад ответить на любые ваши вопросы.
Надеюсь, это кому-то будет полезно! Ваше здоровье!
Ссылка на эту статью в моем блоге: https://www.agustinhoulgrave.com/articles/2018-02/a-guide-to-a-nice-php-console-application