code: protected function execute(InputInterface $input, OutputInterface $output)
      {
          $type = $input->getArgument('type');
          if (!in_array($type, ['scaffold', 'controller', 'model', 'migration'])) {
              throw new Exception('Invalid type.');
          }
  
          $name    = ucfirst($input->getArgument('name'));
          $pattern = '/^[A-Z][a-zA-Z0-9]*$/';
          if (1 !== preg_match($pattern, $name)) {
              throw new Exception('Invalid name.');
          }
  
          $fields = $input->getArgument('fields');
          if (!is_array($fields)) {
              throw new Exception('Invalid fields.');
          }
  
          if (false === is_file('composer.json')) {
              throw new Exception('Commands must be run from root of project.');
          }
  
          $version = $input->getOption('api-version');
  
          $generator = $this->generatorFactory->fetch($type);
          if (!$generator->validate($name, $fields)) {
              throw new Exception('Fields not valid.');
          }
  
          try {
              $generator->process($name, $fields, ['version' => $version]);
              $output->writeln('<info>Generation completed.</info>');
          } catch (Exception $e) {
              echo $e->getMessage();
          }
  
          return true;
      }
docs: {@inheritdoc}