diff --git a/src/CliProgram/Validation/TCommandWithValidation.php b/src/CliProgram/Validation/TCommandWithValidation.php index 07a8339..ba92d99 100644 --- a/src/CliProgram/Validation/TCommandWithValidation.php +++ b/src/CliProgram/Validation/TCommandWithValidation.php @@ -67,20 +67,30 @@ trait TCommandWithValidation { //region Get the argument value $argumentValue = $input->getArgument($argumentName); //endregion - //region Check the argument value is not Null + //region Check the argument value is not if ($argumentValue === null) { // If the value is strictly Null (the default value), don't check it → skip continue; } //endregion - //region Check the value is valid - if (!$argumentValidator->validate($argumentValue)) { - throw new InvalidValueException(sprintf('The "%s" argument has not a valid value', $argumentName)); + //region Check the value is valid and replace it by the one extracted from the validator + if ($this->getDefinition()->getArgument($argumentName)->isArray() && is_array($argumentValue)) { + // This is an “array” argument → check and replace each value instead of the array itself + foreach ($argumentValue as &$argumentValueEntry) { + if (!$argumentValidator->validate($argumentValueEntry)) { + throw new InvalidValueException(sprintf('The "%s" argument has not a valid value', $argumentName)); + } + $argumentValueEntry = $argumentValidator->getValue(); + } + $input->setArgument($argumentName, $argumentValue); + } + else { + if (!$argumentValidator->validate($argumentValue)) { + throw new InvalidValueException(sprintf('The "%s" argument has not a valid value', $argumentName)); + } + $input->setArgument($argumentName, $argumentValidator->getValue()); } - //endregion - //region Replace the value by the one extracted from the validator - $input->setArgument($argumentName, $argumentValidator->getValue()); //endregion } } @@ -111,13 +121,23 @@ trait TCommandWithValidation { } //endregion - //region Check the value is valid - if (!$optionValidator->validate($optionValue)) { - throw new InvalidValueException(sprintf('The "--%s" option has not a valid value', $optionName)); + //region Check the value is valid and replace it by the one extracted from the validator + if ($this->getDefinition()->getOption($optionName)->isArray() && is_array($optionValue)) { + // This is an “array” argument → check and replace each value instead of the array itself + foreach ($optionValue as &$optionValueEntry) { + if (!$optionValidator->validate($optionValueEntry)) { + throw new InvalidValueException(sprintf('The "--%s" option has not a valid value', $optionName)); + } + $optionValueEntry = $optionValidator->getValue(); + } + $input->setArgument($optionName, $optionValue); + } + else { + if (!$optionValidator->validate($optionValue)) { + throw new InvalidValueException(sprintf('The "--%s" option has not a valid value', $optionName)); + } + $input->setOption($optionName, $optionValidator->getValue()); } - //endregion - //region Replace the value by the one extracted from the validator - $input->setOption($optionName, $optionValidator->getValue()); //endregion } }