Webmozart\Console\Api\Args\Format\ArgsFormatBuilder::addArgument PHP Method

addArgument() public method

The existing arguments stored in the builder are preserved. You cannot add arguments after adding a multi-valued argument. If you do so, this method throws an exception. Adding required arguments after optional arguments is not supported. Also in this case an exception is thrown.
public addArgument ( Argument $argument ) : static
$argument Argument The argument to add.
return static The current instance.
    public function addArgument(Argument $argument)
    {
        $name = $argument->getName();
        if ($this->hasArgument($name)) {
            throw CannotAddArgumentException::existsAlready($name);
        }
        if ($this->hasMultiValuedArgument()) {
            throw CannotAddArgumentException::cannotAddAfterMultiValued();
        }
        if ($argument->isRequired() && $this->hasOptionalArgument()) {
            throw CannotAddArgumentException::cannotAddRequiredAfterOptional();
        }
        if ($argument->isMultiValued()) {
            $this->hasMultiValuedArg = true;
        }
        if ($argument->isOptional()) {
            $this->hasOptionalArg = true;
        }
        $this->arguments[$name] = $argument;
        return $this;
    }

Usage Example

 public function testGetDefinitionWithBaseDefinition()
 {
     $this->baseFormatBuilder->addCommandName($server = new CommandName('server'));
     $this->baseFormatBuilder->addArgument($argument1 = new Argument('argument1'));
     $this->baseFormatBuilder->addOption($option1 = new Option('option1'));
     $this->builder = new ArgsFormatBuilder($baseDefinition = $this->baseFormatBuilder->getFormat());
     $this->builder->addCommandName($add = new CommandName('add'));
     $this->builder->addArgument($argument2 = new Argument('argument2'));
     $this->builder->addArgument($argument3 = new Argument('argument3'));
     $this->builder->addOption($option2 = new Option('option2'));
     $this->builder->addOption($option3 = new Option('option3'));
     $definition = $this->builder->getFormat();
     $this->assertSame($baseDefinition, $definition->getBaseFormat());
     // base command names are returned first
     $this->assertSame(array($server, $add), $definition->getCommandNames());
     // base arguments are returned first
     $this->assertSame(array('argument1' => $argument1, 'argument2' => $argument2, 'argument3' => $argument3), $definition->getArguments());
     // base options are returned last
     $this->assertSame(array('option2' => $option2, 'option3' => $option3, 'option1' => $option1), $definition->getOptions());
 }
All Usage Examples Of Webmozart\Console\Api\Args\Format\ArgsFormatBuilder::addArgument