CLI фреймворки для PHP: создание консольных приложений с Symfony Console и Laravel Zero

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

CLI фреймворки для PHP: от простых скриптов к профессиональным консольным приложениям

Консольные приложения (CLI — Command Line Interface) остаются неотъемлемой частью современной разработки. Они используются для автоматизации задач, обработки данных, миграций, запуска тестов и администрирования серверов. PHP, несмотря на свою репутацию «веб-языка», предоставляет отличные возможности для создания мощных CLI-инструментов. В этой статье мы рассмотрим лучшие фреймворки и библиотеки для разработки консольных приложений на PHP, которые помогут вам перейти от простых скриптов к структурированным, тестируемым и масштабируемым решениям.

Зачем использовать CLI фреймворк вместо простого скрипта?

Написание консольного скрипта «с нуля» кажется простым, но быстро приводит к проблемам:

  • Обработка аргументов: разбор $argv и $argc вручную — утомительно и подвержено ошибкам.
  • Вывод информации: цвета, прогресс-бары, таблицы — всё это требует отдельной реализации.
  • Структура кода: сложно организовать несколько команд в одном файле.
  • Тестирование: консольные скрипты сложно тестировать без специальных инструментов.

Использование фреймворка решает эти проблемы и даёт готовую архитектуру, DI-контейнер, систему событий и интеграцию с популярными библиотеками.

Symfony Console — золотой стандарт

Symfony Console — это компонент экосистемы Symfony, который стал де-факто стандартом для создания CLI-приложений на PHP. Он используется в Laravel (через Artisan), Doctrine, Composer и многих других проектах.

Установка и базовый пример

composer require symfony/console

Создадим простую команду, которая приветствует пользователя:

<?php
// greet.php
require __DIR__ . '/vendor/autoload.php';

use Symfony\Component\Console\Application;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Input\InputArgument;

class GreetCommand extends Command
{
    protected static $defaultName = 'app:greet';

    protected function configure(): void
    {
        $this->setDescription('Приветствует пользователя')
             ->addArgument('name', InputArgument::REQUIRED, 'Имя пользователя');
    }

    protected function execute(InputInterface $input, OutputInterface $output): int
    {
        $name = $input->getArgument('name');
        $output->writeln("Привет, <info>$name</info>!");
        return Command::SUCCESS;
    }
}

$application = new Application();
$application->add(new GreetCommand());
$application->run();

Запуск: php greet.php app:greet Иван выведет Привет, Иван! с зелёным цветом.

Основные возможности Symfony Console

  • Автоматическая генерация справки: команда list и help работают «из коробки».
  • Типы аргументов и опций: обязательные/необязательные, массивы, значения по умолчанию.
  • Форматирование вывода: теги <info>, <comment>, <error> для цвета.
  • Прогресс-бары и таблицы: встроенные классы ProgressBar и Table.
  • Поддержка вопросов: интерактивный ввод через QuestionHelper.
  • События и жизненный цикл: можно перехватывать выполнение команды.

Пример с прогресс-баром

use Symfony\Component\Console\Helper\ProgressBar;

protected function execute(InputInterface $input, OutputInterface $output): int
{
    $progressBar = new ProgressBar($output, 50);
    $progressBar->start();

    for ($i = 0; $i < 50; $i++) {
        usleep(100000); // имитация работы
        $progressBar->advance();
    }

    $progressBar->finish();
    $output->writeln('');
    return Command::SUCCESS;
}

Laravel Zero — микрофреймворк для CLI

Laravel Zero — это ответвление Laravel, оптимизированное для создания консольных приложений. Оно включает Eloqu

Рекомендаций