Skip to content

Commit

Permalink
Applyed suggestions from @fabpot and @stof
Browse files Browse the repository at this point in the history
  • Loading branch information
dcsg committed Jan 7, 2014
1 parent c23f34e commit 5e97202
Show file tree
Hide file tree
Showing 5 changed files with 140 additions and 119 deletions.
116 changes: 0 additions & 116 deletions components/console/changing_default_behavior.rst

This file was deleted.

67 changes: 67 additions & 0 deletions components/console/changing_default_command.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
.. index::
single: Console; Changing the Default Command

Changing the Default Command
============================

.. versionadded:: 2.5,
The :method:`Symfony\\Component\\Console\\Application::setDefaultCommand`
method was introduced in version 2.5.

By default the Application will always run the ``ListCommand``. In order to change
the default command you just need to pass the command name you want to run by
default to the ``setDefaultCommand`` method::

namespace Acme\Command;

use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

class HelloWorldCommand extends Command
{
protected function configure()
{
$this->setName('hello:world')
->setDescription('Outputs \'Hello World\'');
}

protected function execute(InputInterface $input, OutputInterface $output)
{
$output->writeln('Hello World');
}
}

Executing the application and changing the default Command::

// application.php

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

$command = new HelloWorldCommand();
$application = new Application();
$application->add($command);
$application->setDefaultCommand($command->getName());
$application->run();

Test the new default console command by running the following

.. code-block:: bash
$ php application.php
This will print the following to the command line:

.. code-block:: text
Hello Fabien
.. tip::

The feature was a limitation since you cannot use the Command ``arguments``.

Learn More!
-----------

* :doc:`/components/console/single_command_tool`
3 changes: 2 additions & 1 deletion components/console/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ Console

introduction
usage
changing_default_behavior
changing_default_command
single_command_tool
events
helpers/index
3 changes: 2 additions & 1 deletion components/console/introduction.rst
Original file line number Diff line number Diff line change
Expand Up @@ -525,7 +525,8 @@ Learn More!
-----------

* :doc:`/components/console/usage`
* :doc:`/components/console/changing_default_behavior`
* :doc:`/components/console/single_command_tool`
* :doc:`/components/console/changing_default_command`

.. _Packagist: https://packagist.org/packages/symfony/console
.. _ANSICON: https://github.com/adoxa/ansicon/downloads
70 changes: 69 additions & 1 deletion components/console/single_command_tool.rst
Original file line number Diff line number Diff line change
@@ -1,4 +1,72 @@
.. index::
single: Console; Single command application

Building a Single Command Application
=====================================

This Document was moved to :doc:`/components/console/changing_default_behaviour`
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
<?php
// command.php
use Acme\Tool\MyApplication;

$application = new MyApplication();
$application->run();

0 comments on commit 5e97202

Please sign in to comment.