Пример #1
0
 /**
  * @param string $baseFieldName
  *
  * @return Closure
  */
 private function getSubmitEventFunction($baseFieldName)
 {
     return function (FormEvent $event) use($baseFieldName) {
         $metaForm = $event->getForm();
         $metaData = $event->getData();
         $parentForm = $metaForm->getParent();
         if ($parentForm === null) {
             throw new LogicException('The MetaType is not a stand alone type, it needs to be used in a parent form');
         }
         if (!$parentForm->has($baseFieldName)) {
             throw new InvalidArgumentException('The base_field_name does not exist in the parent form');
         }
         $defaultValue = $parentForm->get($baseFieldName)->getData();
         $overwritableFields = $this->getOverwritableFields();
         array_walk($overwritableFields, function ($fieldName) use($metaForm, $defaultValue, &$metaData) {
             if ($metaForm->get($fieldName . 'Overwrite')->getData()) {
                 // we are overwriting it so we don't need to set the fallback
                 return;
             }
             $metaData[$fieldName] = $defaultValue;
         });
         $generatedUrl = $this->metaRepository->generateURL(SpoonFilter::htmlspecialcharsDecode($metaData['url']), $metaForm->getConfig()->getOption('generate_url_callback_class'), $metaForm->getConfig()->getOption('generate_url_callback_method'), $metaForm->getConfig()->getOption('generate_url_callback_parameters'));
         if ($generatedUrl !== $metaData['url'] && $metaData['urlOverwrite']) {
             $metaForm->get('url')->addError(new FormError($this->translator->trans('err.URLAlreadyExists')));
             $event->setData($metaData);
             return;
         }
         $metaData['url'] = $generatedUrl;
         $event->setData($metaData);
     };
 }