1: <?php
 2: 
 3:  4:  5:  6:  7:  8:  9: 10: 
11: 
12: namespace Symfony\Component\Console\Command;
13: 
14: use Symfony\Component\Console\Input\InputArgument;
15: use Symfony\Component\Console\Input\InputOption;
16: use Symfony\Component\Console\Input\InputInterface;
17: use Symfony\Component\Console\Output\OutputInterface;
18: use Symfony\Component\Console\Command\Command;
19: use Symfony\Component\Console\Input\InputDefinition;
20: 
21: 22: 23: 24: 25: 
26: class ListCommand extends Command
27: {
28:     29: 30: 
31:     protected function configure()
32:     {
33:         $this
34:             ->setName('list')
35:             ->setDefinition($this->createDefinition())
36:             ->setDescription('Lists commands')
37:             ->setHelp(<<<EOF
38: The <info>%command.name%</info> command lists all commands:
39: 
40:   <info>php %command.full_name%</info>
41: 
42: You can also display the commands for a specific namespace:
43: 
44:   <info>php %command.full_name% test</info>
45: 
46: You can also output the information as XML by using the <comment>--xml</comment> option:
47: 
48:   <info>php %command.full_name% --xml</info>
49: 
50: It's also possible to get raw list of commands (useful for embedding command runner):
51: 
52:   <info>php %command.full_name% --raw</info>
53: EOF
54:             )
55:         ;
56:     }
57: 
58:     /**
59:      * {@inheritdoc}
60:      */
61:     protected function getNativeDefinition()
62:     {
63:         return $this->createDefinition();
64:     }
65: 
66:     /**
67:      * {@inheritdoc}
68:      */
69:     protected function execute(InputInterface $input, OutputInterface $output)
70:     {
71:         if ($input->getOption('xml')) {
72:             $output->writeln($this->getApplication()->asXml($input->getArgument('namespace')), OutputInterface::OUTPUT_RAW);
73:         } else {
74:             $output->writeln($this->getApplication()->asText($input->getArgument('namespace'), $input->getOption('raw')));
75:         }
76:     }
77: 
78:     private function createDefinition()
79:     {
80:         return new InputDefinition(array(
81:             new InputArgument('namespace', InputArgument::OPTIONAL, 'The namespace name'),
82:             new InputOption('xml', null, InputOption::VALUE_NONE, 'To output help as XML'),
83:             new InputOption('raw', null, InputOption::VALUE_NONE, 'To output raw command list'),
84:         ));
85:     }
86: }
87: