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);
};
}