Создание приложения одной команды

Дата обновления перевода 2023-08-21

Создание приложения одной команды

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/bin/env php
<?php
require __DIR__.'/vendor/autoload.php';

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

(new Application('echo', '1.0.0'))
  ->register('echo')
      ->addArgument('foo', InputArgument::OPTIONAL, 'The directory')
      ->addOption('bar', null, InputOption::VALUE_REQUIRED)
      ->setCode(function (InputInterface $input, OutputInterface $output): int {
          // аргументы и опции вывода
      })
  ->getApplication()
  ->setDefaultCommand('echo', true) // Приложение одной команды
  ->run();

Метод setDefaultCommand() принимает булевы значения в качестве второго параметра. Если "true", то команда echo будет использована всегда, без необходимости передачи её названия.

Конечно же, вы всё равно можете зарегистрировать команду, как обычно:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/env php
<?php
require __DIR__.'/vendor/autoload.php';

use Acme\Command\DefaultCommand;
use Symfony\Component\Console\Application;

$application = new Application('echo', '1.0.0');
$command = new DefaultCommand();

$application->add($command);

$application->setDefaultCommand($command->getName(), true);
$application->run();