Backend\Form\Type\MetaType::getSubmitEventFunction PHP Method

getSubmitEventFunction() private method

private getSubmitEventFunction ( string $baseFieldName ) : Closure
$baseFieldName string
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);
        };
    }