When building a command line tool, you may not need to provide several commands. In such a case, having to pass the command name each time is tedious. Fortunately, it is possible to remove this need by declaring a single command application:
#!/usr/bin/env php <?php require __DIR__.'/vendor/autoload.php'; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\SingleCommandApplication; (new SingleCommandApplication()) ->setName('My Super Command') // Optional ->setVersion('1.0.0') // Optional ->addArgument('foo', InputArgument::OPTIONAL, 'The directory') ->addOption('bar', null, InputOption::VALUE_REQUIRED) ->setCode(function (InputInterface $input, OutputInterface $output): int { // output arguments and options }) ->run();
You can still register a command as usual:
#!/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();
The :method:`Symfony\\Component\\Console\\Application::setDefaultCommand` method
accepts a boolean as second parameter. If true, the command echo
will then
always be used, without having to pass its name.