Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. PHP
Code

Как создавать пользовательские консольные команды с помощью компонента Symfony Console 

by
Difficulty:BeginnerLength:MediumLanguages:

Russian (Pусский) translation by Masha Kolesnikova (you can also view the original English article)

В этой статье мы рассмотрим то, каким образом вы можете создавать пользовательские консольные команды (CLI) в ваших PHP-приложениях с помощью компонента Symfony Console. После установки необходимых библиотек мы создадим несколько примеров для демонстрации концепций компонента Console.

Фактически, этот компонент используется несколькими PHP фреймворками для разработки приложений CLI, и несколько популярных фреймворков уже используют этот компонент в качестве отправной точки.

Что такое Console Component?

Компонент Symfony Console позволяет создавать пользовательские команды CLI в ваших PHP-приложениях. Если вы когда-либо работали с Laravel или Symfony, вы скорее всего знакомы с инструментами CLI, которые они предоставляют, чтобы облегчить такие ежедневные операции как:

  • генерация кода каркасов
  • очистка кешей
  • установка, включение и выключение дополнительных сервисов
  • запуск миграции базы данных
  • и другие

Например, в случае с Laravel он поставляется с инструментом artisan, который предоставляет множество полезных команд для облегчения нашей жизни. Вы можете быть удивлены, узнав, что инструмент artisan построен поверх самого компонента Symfony Console! На самом деле существует множество фреймворков, которые используют компонент Console для создания своих инструментов командной строки.

В этой статье мы рассмотрим основы компонента Console, чтобы вы могли создавать пользовательские команды CLI в своих PHP-приложениях. Для начала мы перейдем к установке компонента Console с помощью Composer. После установки мы создадим несколько примеров для демонстрационных целей.

Установка и настройка

В этом разделе мы собираемся установить компонент Console, необходимый для создания консольных команд в ваших PHP-приложениях. Я предполагаю, что вы установили Composer так как нам понадобится установить компонент Console, который доступен в Packagist.

После того, как вы установили Composer, перейдите и установите компонент Console, используя следующую команду.

Это должно было создать файл composer.json, со следующим содержимым:

Давайте изменим файл composer.json, чтобы он выглядел следующим образом:

Поскольку мы добавили новую запись в classmap, давайте продолжим и обновим автозагрузчик Composer, выполнив следующую команду.

Теперь вы можете использовать пространство имен Console для автозагрузки классов в каталоге src.

Ваша первая команда HelloWorld

Создание консольных команд с помощью компонента Console - это процесс, состоящий из двух этапов.

  • Во-первых, вам нужно создать консольное приложение, которое загружает необходимые зависимости и регистрирует ваши пользовательские команды.
  • Затем вам нужно создать файлы для всех команд, которые вы зарегистрировали в консольном приложении.

Создание консольного приложения

В этом разделе мы перейдем к созданию пользовательского консольного приложения.

Предлагаемая структура каталогов нашего консольного приложения следующим образом.

Идем дальше и создаем файл /bin/console приложения со следующим содержимым. Обратите внимание, что расширение файла отсутствует, а также убедитесь, что это выполняемый файл, так как нам нужно запустить его из командной строки.

Первая строка в файле #!/usr/bin/env php гарантирует, что она запускается в среде PHP. Двигаемся дальше и попробуйте запустить его и посмотреть, что происходит.

Неплохо! Имея всего несколько строк кода, у вас есть приложение! Но в данный момент оно пока не делает ничего полезного. В следующем разделе мы увидим, как вы можете создавать пользовательские команды и регистрировать их в нашем пользовательском консольном приложении.

Создайте файл команды Hello World

Давайте продолжим и создадим нашу первую пользовательскую команду: HelloworldCommand. Создайте файл src/App/Commands/HelloworldCommand.php со следующим содержимым.

При создании пользовательской команды необходимо создать два основных метода: configure и execute.

Как следует из названия, метод configure позволяет настроить вашу команду, чтобы вы могли настроить имя команды, краткое описание, текст справки и т.д. Вы также можете настроить аргументы для своей команды, если вы хотите передавать параметры во время выполнения команды.

В приведенном выше примере имя команды установлено в hello-world. Кроме того, мы хотим передать имя пользователя в качестве первого аргумента, и поэтому мы настроили его с помощью метода addArgument.

С другой стороны, метод execute содержит логику приложения команды. В нашем случае мы сделали всё довольно просто, отобразив Hello World в качестве результата команды.

Прежде чем вы сможете продолжить эту команду, вам необходимо зарегистрировать ее в консольном приложении, которое мы создали в предыдущем разделе. Давайте быстро изменим файл bin/console, чтобы он выглядел следующим образом.

Как вы можете видеть, мы использовали метод add объекта Application для добавления команды HelloworldCommand. Давайте быстро перечислим все доступные команды.

Как и ожидалось, команда hello-world появляется в списке доступных команд! Запустим её!

Вот как вы можете настроить основные команды!

Реальный пример команды - Очистка кэша

В предыдущем разделе мы построили команду hello-world, чтобы продемонстрировать концепции компонента Console. В этом разделе мы продолжим и создаем реальный пример, который демонстрирует, как вы можете создать команду для очистки кэшей в своем приложении.

Создадим файл Clear Cache Command

Двигаемся дальше и создаем файл src/App/Commands/ClearcacheCommand.php со следующим содержимым.

Метод configure будет почти такой же, за исключением того, что мы использовали метод addOption для добавления опции к нашей команде. Таким образом, вы можете передавать сгруппированные значения с помощью параметра -groups.

С другой стороны, метод execute содержит логику приложения нашей команды.

Если вы хотите очистить кеш определенных групп, вам необходимо передать имена групп вместе с параметром --group. С другой стороны, пропустите параметр --group, если вы хотите очистить все кеши. Возможно, вы заметили, что мы сделали параметр --group необязательным, предоставив значение InputOption::VALUE_OPTIONAL в третьем аргументе метода addOption.

Регистрация и тестирование

Прежде чем мы начнем и запустим команду, давайте зарегистрируем команду в нашем консольном приложении.

Теперь идите и запустите команду bin/console clear-cache, чтобы очистить все кеши!

Затем, если вы хотите очистить определенные кеши, вы можете попробовать что-то вроде этого.

Конечно, вам нужно будет реализовать реальную логику для очистки кэшей, но это должно стать для вас хорошей отправной точкой.

Заключение

Сегодня мы рассмотрели один из популярных компонентов, предоставляемых фреймворком Symfony: Console Component. Это действительно полезный компонент, если вы хотите разработать собственное приложение CLI, которое поможет вам с легкостью выполнять ваши повседневные задачи.

В первой части статьи мы прошли установку и настройку компонента. Затем во вторй части мы создали несколько примеров консольных команд.

Сообщите нам, что вы думаете в комментариях ниже.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.