Что такое CLI фреймворк для PHP и зачем он нужен?
CLI (Command Line Interface) фреймворк для PHP — это инструмент, который упрощает создание консольных приложений и скриптов. Вместо ручного парсинга аргументов $argv и обработки ввода/вывода, вы получаете готовую архитектуру с поддержкой команд, опций, цветного вывода, прогресс-баров и даже интерактивных меню.
В современной PHP-разработке CLI фреймворки используются повсеместно:
- Автоматизация задач (миграции БД, кэширование, деплой)
- Генерация кода (scaffolding)
- CRON-скрипты и фоновые обработчики
- Инструменты DevOps и CI/CD
Давайте рассмотрим пять самых популярных решений, которые вы можете использовать на pythonlib.ru.
1. Symfony Console — стандарт индустрии
Symfony Console — самый зрелый и популярный CLI фреймворк для PHP. Он используется в Laravel Artisan, Doctrine, Composer и сотнях других проектов.
Установка
composer require symfony/console
Пример: простое приложение "Hello World"
// hello.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;
class HelloCommand extends Command
{
protected static $defaultName = 'app:hello';
protected function configure(): void
{
$this->setDescription('Приветствие пользователя');
}
protected function execute(InputInterface $input, OutputInterface $output): int
{
$output->writeln('<info>Привет, мир!</info>');
return Command::SUCCESS;
}
}
$application = new Application();
$application->add(new HelloCommand());
$application->run();
Ключевые возможности
- Автоматическая генерация справки (
--help) - Поддержка опций и аргументов с валидацией
- Цветной вывод через стили (info, error, comment)
- Прогресс-бары, таблицы, вопросы
- Тестирование команд через
CommandTester
2. Laravel Zero — микро-фреймворк на основе Laravel
Laravel Zero — это облегченная версия Laravel, оптимизированная для CLI. Идеально подходит, если вы привыкли к экосистеме Laravel, но не хотите тащить весь фреймворк.
Установка
composer create-project laravel-zero/laravel-zero my-cli-app
Пример: команда с аргументами
// app/Commands/GreetCommand.php
namespace App\Commands;
use LaravelZero\Framework\Commands\Command;
class GreetCommand extends Command
{
protected $signature = 'greet {name : Имя пользователя} {--yell : Кричать?}';
protected $description = 'Приветствие с именем';
public function handle(): int
{
$name = $this->argument('name');
$message = "Привет, $name!";
if ($this->option('yell')) {
$message = strtoupper($message);
}
$this->info($message);
return self::SUCCESS;
}
}
Что внутри?
- Eloquent ORM (опционально)
- Artisan-style команды
- Поддержка очередей и задач
- Миграции и сидинг для БД
- Встроенная компиляция в PHAR-архив
3. Minicli — минималистичный и быстрый
Minicli — это легковесный CLI фреймворк без зависимостей. Весит менее 100 КБ и идеально подходит для микросервисов и простых утилит.
Установка
composer require minicli/minicli
Пример: интерактивный опрос
// app.php
require __DIR__ . '/vendor/autoload.php';
use Minicli\App;
$app = new App();
$app->registerCommand('ask', function () use ($app) {
$name = $app->getInput()->read('Ваше имя: ');
$app->getPrinter()->info("Приятно познакомиться, $name!");
});
$app->run();
Особенности
- Нет внешних зависимостей (кроме PHP 7.4+)
- Поддержка вложенных команд
Также в библиотеке
Работа с изображениями в Swift: полное руководство для iOS и macOS
Машинное обучение на Java: обзор основных библиотек для разработки
ORM для Kotlin: сравнение и примеры (Exposed, Ktorm, Hibernate)
JSON обработка в Swift: Codable, Foundation и SwiftyJSON для iOS/macOS