Chris@17
|
1 <?php
|
Chris@17
|
2 namespace Consolidation\AnnotatedCommand;
|
Chris@17
|
3
|
Chris@17
|
4 /**
|
Chris@17
|
5 * Prepare parameter list for execurion. Handle injection of any
|
Chris@17
|
6 * special values (e.g. $input and $output) into the parameter list.
|
Chris@17
|
7 */
|
Chris@17
|
8 class ParameterInjection implements ParameterInjector
|
Chris@17
|
9 {
|
Chris@17
|
10 public function __construct()
|
Chris@17
|
11 {
|
Chris@17
|
12 $this->register('Symfony\Component\Console\Input\InputInterface', $this);
|
Chris@17
|
13 $this->register('Symfony\Component\Console\Output\OutputInterface', $this);
|
Chris@17
|
14 }
|
Chris@17
|
15
|
Chris@17
|
16 public function register($interfaceName, ParameterInjector $injector)
|
Chris@17
|
17 {
|
Chris@17
|
18 $this->injectors[$interfaceName] = $injector;
|
Chris@17
|
19 }
|
Chris@17
|
20
|
Chris@17
|
21 public function args($commandData)
|
Chris@17
|
22 {
|
Chris@17
|
23 return array_merge(
|
Chris@17
|
24 $commandData->injectedInstances(),
|
Chris@17
|
25 $commandData->getArgsAndOptions()
|
Chris@17
|
26 );
|
Chris@17
|
27 }
|
Chris@17
|
28
|
Chris@17
|
29 public function injectIntoCommandData($commandData, $injectedClasses)
|
Chris@17
|
30 {
|
Chris@17
|
31 foreach ($injectedClasses as $injectedClass) {
|
Chris@17
|
32 $injectedInstance = $this->getInstanceToInject($commandData, $injectedClass);
|
Chris@17
|
33 $commandData->injectInstance($injectedInstance);
|
Chris@17
|
34 }
|
Chris@17
|
35 }
|
Chris@17
|
36
|
Chris@17
|
37 protected function getInstanceToInject(CommandData $commandData, $interfaceName)
|
Chris@17
|
38 {
|
Chris@17
|
39 if (!isset($this->injectors[$interfaceName])) {
|
Chris@17
|
40 return null;
|
Chris@17
|
41 }
|
Chris@17
|
42
|
Chris@17
|
43 return $this->injectors[$interfaceName]->get($commandData, $interfaceName);
|
Chris@17
|
44 }
|
Chris@17
|
45
|
Chris@17
|
46 public function get(CommandData $commandData, $interfaceName)
|
Chris@17
|
47 {
|
Chris@17
|
48 switch ($interfaceName) {
|
Chris@17
|
49 case 'Symfony\Component\Console\Input\InputInterface':
|
Chris@17
|
50 return $commandData->input();
|
Chris@17
|
51 case 'Symfony\Component\Console\Output\OutputInterface':
|
Chris@17
|
52 return $commandData->output();
|
Chris@17
|
53 }
|
Chris@17
|
54
|
Chris@17
|
55 return null;
|
Chris@17
|
56 }
|
Chris@17
|
57 }
|