Building a single Command Application
Edit this pageWarning: You are browsing the documentation for Symfony 5.1, which is no longer maintained.
Read the updated version of this page for Symfony 6.3 (the current stable version).
Building a single Command Application
When building a command line tool, you may not need to provide several commands. In such case, having to pass the command name each time is tedious.
5.1
The SingleCommandApplication class was introduced in Symfony 5.1.
Fortunately, it is possible to remove this need by declaring a single command application:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
#!/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) {
// output arguments and options
})
->run();
You can still register a command as usual:
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();
The setDefaultCommand() method
accepts a boolean as second parameter. If true, the command echo
will then
always be used, without having to pass its name.