/**
  * @param FormInterface   $form
  * @param HelperSet       $helperSet
  * @param InputInterface  $input
  * @param OutputInterface $output
  *
  * @throws CanNotInteractWithForm If the input isn't interactive or a compound form.
  *
  * @return array
  */
 public function interactWith(FormInterface $form, HelperSet $helperSet, InputInterface $input, OutputInterface $output)
 {
     if (!$input->isInteractive()) {
         throw new CanNotInteractWithForm('This interactor only works with interactive input');
     }
     if (!FormUtil::isCompound($form)) {
         throw new CanNotInteractWithForm('Expected a compound form');
     }
     $submittedData = [];
     foreach ($form->all() as $name => $field) {
         try {
             $submittedData[$name] = $this->formInteractor->interactWith($field, $helperSet, $input, $output);
         } catch (NoNeedToInteractWithForm $exception) {
             continue;
         }
     }
     return $submittedData;
 }
 /**
  * @param FormInterface   $form
  * @param HelperSet       $helperSet
  * @param InputInterface  $input
  * @param OutputInterface $output
  *
  * @throws CanNotInteractWithForm     If the input isn't interactive.
  * @throws FormNotReadyForInteraction If the "collection" form hasn't the option "allow_add".
  *
  * @return array
  */
 public function interactWith(FormInterface $form, HelperSet $helperSet, InputInterface $input, OutputInterface $output)
 {
     if (!$input->isInteractive()) {
         throw new CanNotInteractWithForm('This interactor only works with interactive input');
     }
     if (!FormUtil::isTypeInAncestry($form, 'collection')) {
         throw new CanNotInteractWithForm('Expected a "collection" form');
     }
     if (!$form->getConfig()->getOption('allow_add')) {
         throw new FormNotReadyForInteraction('The "collection" form should have the option "allow_add"');
     }
     $this->printHeader($form, $output);
     $submittedData = [];
     $prototype = $form->getConfig()->getAttribute('prototype');
     while ($this->askIfContinueToAdd($helperSet, $input, $output)) {
         $submittedData[] = $this->formInteractor->interactWith($prototype, $helperSet, $input, $output);
     }
     return $submittedData;
 }