diff --git a/components/console/single_command_tool.rst b/components/console/single_command_tool.rst index 609f7a0c2e3..f954460aae8 100644 --- a/components/console/single_command_tool.rst +++ b/components/console/single_command_tool.rst @@ -6,68 +6,51 @@ 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. Fortunately, -it is possible to remove this need by extending the application:: - - namespace Acme\Tool; - - use Symfony\Component\Console\Application; - use Symfony\Component\Console\Input\InputInterface; - - class MyApplication extends Application - { - /** - * Gets the name of the command based on input. - * - * @param InputInterface $input The input interface - * - * @return string The command name - */ - protected function getCommandName(InputInterface $input) - { - // This should return the name of your command. - return 'my_command'; - } - - /** - * Gets the default commands that should always be available. - * - * @return array An array of default Command instances - */ - protected function getDefaultCommands() - { - // Keep the core default commands to have the HelpCommand - // which is used when using the --help option - $defaultCommands = parent::getDefaultCommands(); - - $defaultCommands[] = new MyCommand(); - - return $defaultCommands; - } - - /** - * Overridden so that the application doesn't expect the command - * name to be the first argument. - */ - public function getDefinition() - { - $inputDefinition = parent::getDefinition(); - // clear out the normal first argument, which is the command name - $inputDefinition->setArguments(); - - return $inputDefinition; - } - } - -When calling your console script, the command ``MyCommand`` will then always -be used, without having to pass its name. - -You can also simplify how you execute the application:: - - #!/usr/bin/env php - run(); +it is possible to remove this need declaring a single command application:: + + #!/usr/bin/env php + register('echo') + ->addArgument('foo', InputArgument::OPTIONAL, 'The directory') + ->addOption('bar', null, InputOption::VALUE_REQUIRED) + ->setCode(function(InputInterface $input, OutputInterface $output) { + // output arguments and options + }) + ->getApplication() + ->setDefaultCommand('echo', true) // Single command application + ->run(); + +:method:`Symfony\\Component\\Console\\Application::setDefaultCommand` accepts a +boolean as a second parameter. If true, the command ``echo``will then always be +used, without having to pass its name. + +Of course, you can still register a command as usual:: + + #!/usr/bin/env php + add($command); + + $application->setDefaultCommand($command->getName(), true); + $application->run();