فهرست منبع

[Command] Fix array option parsing

Antoine Hérault 14 سال پیش
والد
کامیت
fb051b2f98

+ 7 - 1
src/Symfony/Component/Console/Input/ArgvInput.php

@@ -229,7 +229,13 @@ class ArgvInput extends Input
             $value = $option->isValueOptional() ? $option->getDefault() : true;
         }
 
-        $this->options[$name] = $value;
+        if ($option->isArray() && isset($this->options[$name])) {
+            $this->options[$name][] = $value;
+        } else if ($option->isArray()) {
+            $this->options[$name] = array($value);
+        } else {
+            $this->options[$name] = $value;
+        }
     }
 
     /**

+ 4 - 0
tests/Symfony/Tests/Component/Console/Input/ArgvInputTest.php

@@ -147,6 +147,10 @@ class ArgvInputTest extends \PHPUnit_Framework_TestCase
         } catch (\RuntimeException $e) {
             $this->assertNotEquals('Too many arguments.', $e->getMessage(), '->parse() parses array arguments');
         }
+
+        $input = new ArgvInput(array('cli.php', '--name=foo', '--name=bar', '--name=baz'));
+        $input->bind(new InputDefinition(array(new InputOption('name', null, InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY))));
+        $this->assertEquals(array('name' => array('foo', 'bar', 'baz')), $input->getOptions());
     }
 
     public function testGetFirstArgument()