CLI-фреймворки для PHP: создаём мощные консольные приложения
Современная разработка на PHP не ограничивается веб-приложениями. Всё чаще разработчикам требуется создавать консольные (CLI) инструменты: обработчики очередей, миграции, генераторы отчётов, парсеры данных. Для этих задач существуют специализированные фреймворки, которые упрощают создание консольных команд, обработку аргументов, форматирование вывода и управление зависимостями.
Основные CLI-фреймворки для PHP
- Symfony Console — самый популярный компонент от Symfony, используется в Laravel, Drupal, Composer и сотнях других проектов.
- Laravel Zero — микро-фреймворк на основе Laravel, оптимизированный для CLI-приложений.
- CLIFramework — лёгкий фреймворк с поддержкой Zsh/Bash автодополнения.
- PHP CLI Tools — минималистичная библиотека для простых скриптов.
Symfony Console: универсальный стандарт
Компонент symfony/console является де-факто стандартом для CLI-приложений на PHP. Он предоставляет полный набор инструментов для создания команд, включая:
- Автоматический разбор аргументов и опций командной строки.
- Форматированный вывод с поддержкой цветов, таблиц и прогресс-баров.
- Интерактивные вопросы и автодополнение.
- Гибкую систему событий и жизненного цикла команды.
// Пример простой команды на Symfony Console
<?php
// файл: src/Command/GreetCommand.php
namespace App\Command;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
class GreetCommand extends Command
{
protected static $defaultName = 'app:greet';
protected function configure(): void
{
$this
->setDescription('Приветствует пользователя')
->addArgument('name', InputArgument::REQUIRED, 'Имя пользователя')
->addOption('yell', null, null, 'Вывести заглавными буквами');
}
protected function execute(InputInterface $input, OutputInterface $output): int
{
$name = $input->getArgument('name');
$message = "Привет, $name!";
if ($input->getOption('yell')) {
$message = strtoupper($message);
}
$output->writeln($message);
return Command::SUCCESS;
}
}
// Запуск: php bin/console app:greet Иван --yell
Laravel Zero: Laravel для командной строки
Laravel Zero — это микро-фреймворк, который переносит удобство Laravel (Eloquent ORM, Artisan, Blade, задачи по расписанию) в мир CLI. Он идеален для создания самостоятельных консольных утилит, не требующих веб-интерфейса.
Ключевые возможности Laravel Zero:
- Знакомый синтаксис Artisan-команд.
- Встроенная поддержка базы данных (SQLite, MySQL).
- Планировщик задач (Cron-подобный функционал).
- Форматирование вывода с помощью таблиц и прогресс-баров.
- Возможность компиляции в единый PHAR-файл.
// Пример команды в Laravel Zero
<?php
// файл: app/Commands/ExportUsers.php
namespace App\Commands;
use Illuminate\Console\Command;
use App\Models\User;
class ExportUsers extends Command
{
protected $signature = 'export:users {--format=csv : Формат вывода (csv/json)}';
protected $description = 'Экспортирует список пользователей';
public function handle(): int
{
$users = User::all(['id', 'name', 'email']);
$format = $this->option('format');
if ($format === 'json') {
$this->line($users->toJson(JSON_PRETTY_PRINT));
} else {
$headers = ['ID', 'Имя', 'Email'];
$this->table($headers, $users->toArray());
}
return Command::SUCCESS;
}
}
// Запуск: php app export:users --format=json
Сравнение: когда что выбрать?
- Symfony Console — для проектов, где уже используется Symfony или нужна максимальная гибкость и производительность. Подходит для создания библиотек и компонентов.
- Laravel Zero — для быстрой разработки самостоятельных утилит с возможностью работы с БД и планировщиком. Идеален для DevOps-инструментов и обработчиков данных.
-
Также в библиотеке
Рекомендаций