Пример #1
0
 /**
  * Modifies form based on submitted data
  *
  * @param FormEvent $event
  */
 public function preSubmit(FormEvent $event)
 {
     $form = $event->getForm();
     /** @var Integration $originalData */
     $originalData = $form->getData();
     $data = $event->getData();
     $this->muteFields($form, $originalData);
     if (!empty($data['type'])) {
         $type = $data['type'];
         $transportTypeModifier = $this->getTransportTypeModifierClosure($type);
         $transportTypeModifier($form);
         $connectorsModifier = $this->getConnectorsModifierClosure($type);
         $connectorsModifier($form);
         $synchronizationSettingsModifier = $this->getDynamicModifierClosure($type, 'synchronization_settings');
         $synchronizationSettingsModifier($form);
         $mappingSettingsModifier = $this->getDynamicModifierClosure($type, 'mapping_settings');
         $mappingSettingsModifier($form);
         // value that was set on postSet is replaced by null from request
         $typeChoices = array_keys($form->get('transportType')->getConfig()->getOption('choices'));
         $firstChoice = reset($typeChoices);
         $data['transportType'] = isset($data['transportType']) ? $data['transportType'] : $firstChoice;
         /*
          * If transport type changed we have to modify ViewData(it's already saved entity)
          * due to it's not matched the 'data_class' option of newly added form type
          */
         if ($originalData !== null && ($transport = $originalData->getTransport())) {
             $transportType = $this->registry->getTransportTypeBySettingEntity($transport, $originalData->getType(), true);
             // second condition cover case when we have same name for few integration types
             if ($transportType !== $data['transportType'] || $originalData->getType() !== $data['type']) {
                 /** @var Integration $setEntity */
                 $setEntity = $form->getViewData();
                 $setEntity->clearTransport();
             }
         }
         $transportModifier = $this->getTransportModifierClosure($type, $data['transportType']);
         $transportModifier($form);
         $event->setData($data);
     }
 }