Компонент Console является вторым по популярности компонентом Symfony, его скачали почти 200 миллионов человек. Это настолько популярно, что многие разработчики пишут все свои команды с ним, вместо того, чтобы создавать традиционные команды bash/shell
.
По этой причине в Symfony 5.1 улучшили способ создания приложений с одной командой. Это уже было возможно в предыдущих версиях Symfony благодаря методу setDefaultCommand()
, но теперь это стало еще проще с введением нового класса SingleCommandApplication
:
#!/usr/bin/env php
<?php
require __DIR__.'/vendor/autoload.php';
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\SingleCommandApplication;
(new SingleCommandApplication())
->setCode(function (InputInterface $input, OutputInterface $output) {
// add here the code of your console command...
})
->run();
Это все! Сохраните этот код в файле (например, my-command.php
) и запустите его, как любой другой сценарий PHP-консоли (php my-command.php
). Этот новый класс поддерживает все функции консоли Symfony, поэтому вы можете определять аргументы, параметры, справку по командам и т. д.
// ...
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\SingleCommandApplication;
(new SingleCommandApplication())
->setName('My Super Command')
->setVersion('1.0.0')
->setHelp('This command allows you to...')
->addArgument('foo', InputArgument::OPTIONAL, 'The directory')
->addOption('bar', null, InputOption::VALUE_REQUIRED)
->setCode(function (InputInterface $input, OutputInterface $output) {
// ...
})
->run();