i found a solution... most likely not the best one but it works
solution
- copy the class Command declare it abstract and let it extend the old Command
- copy ContainerAwareCommand and let it extend your new Command
- add the code to the new Command
public function notIgnoreValidationErrors()
{
$this->ignoreValidationErrors = false;
}
protected function configureAdditionalInput(InputInterface $input, OutputInterface $output)
{
}
-change run() to
public function run(InputInterface $input, OutputInterface $output)
{
// force the creation of the synopsis before the merge with the app definition
$this->getSynopsis(true);
$this->getSynopsis(false);
// add the application arguments and options
$this->mergeApplicationDefinition();
// bind the input against the command specific arguments/options
try {
$input->bind($this->definition);
} catch (ExceptionInterface $e) {
if (!$this->ignoreValidationErrors) {
throw $e;
}
}
$this->configureAdditionalInput($input, $output);
// bind the input against the command specific arguments/options
try {
$input->bind($this->definition);
} catch (ExceptionInterface $e) {
if (!$this->ignoreValidationErrors) {
throw $e;
}
}
$this->initialize($input, $output);
if (null !== $this->processTitle) {
if (function_exists('cli_set_process_title')) {
if (false === @cli_set_process_title($this->processTitle)) {
if ('Darwin' === PHP_OS) {
$output->writeln('<comment>Running "cli_get_process_title" as an unprivileged user is not supported on MacOS.</comment>');
} else {
$error = error_get_last();
trigger_error($error['message'], E_USER_WARNING);
}
}
} elseif (function_exists('setproctitle')) {
setproctitle($this->processTitle);
} elseif (OutputInterface::VERBOSITY_VERY_VERBOSE === $output->getVerbosity()) {
$output->writeln('<comment>Install the proctitle PECL to be able to change the process title.</comment>');
}
}
if ($input->isInteractive()) {
$this->interact($input, $output);
}
// The command name argument is often omitted when a command is executed directly with its run() method.
// It would fail the validation if we didn't make sure the command argument is present,
// since it's required by the application.
if ($input->hasArgument('command') && null === $input->getArgument('command')) {
$input->setArgument('command', $this->getName());
}
$input->validate();
if ($this->code) {
$statusCode = call_user_func($this->code, $input, $output);
} else {
$statusCode = $this->execute($input, $output);
}
return is_numeric($statusCode) ? (int) $statusCode : 0;
}
- change your command to (ContainerAwareCommand is your new Class)
class ImportCommand extends ContainerAwareCommand
{
protected function configure()
{
$this
->setName('app:import')
->addArgument('importKey', InputArgument::REQUIRED)
;
$this->ignoreValidationErrors();
}
protected function configureAdditionalInput(InputInterface $input, OutputInterface $output)
{
$key = $input->getArgument('importKey');
$this->notIgnoreValidationErrors();
// this will be handled in
// $importProvider = $this->getContainer()->get('app.import');
// $importer = $importProvider->getImport($key);
// $importer->configureCommand($input, $output, $this);
if($key == 'test')
{
$this->addOption('supplier', null,InputOption::VALUE_REQUIRED);
}
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$supplier = $input->getOption('supplier');
$output->writeln("your provided suplier id is '$supplier'");
}
}
now run command
bin/console app:import test --supplier=5
your provided suplier id is '5'