public function postSetData(FormEvent $event) { $object = $event->getData(); $form = $event->getForm(); if ($object === null) { return; } $repository = $this->em->getRepository('Gedmo\\Translatable\\Entity\\Translation'); $translations = $repository->findTranslations($object); $fileMappingsFields = array_keys($this->getFileMappings($object)); foreach ($this->localeManager->getActiveList() as $localeData) { $locale = $localeData->getAlias(); if (!isset($translations[$locale])) { continue; } foreach ($translations[$locale] as $field => $value) { if ($form->has('translation___' . $field . '___' . $locale)) { if (in_array($field, $fileMappingsFields)) { $value = unserialize($value); } else { $value = $this->typeCast($object, $field, $value); } $form->get('translation___' . $field . '___' . $locale)->setData($value); } } } }
/** * Закончить задание содержания мультиязычной * вкладки и передать результат в мапер формы * @desc Метод повторяет поведение класса FormMapper * @return FormMapper */ public function end() { $eventSubscriber = new AddTranslationFieldSubscriber($this->em, $this->localeManager, $this->mappingFactory, $this->fileStorage); $this->formMapper->getFormBuilder()->addEventSubscriber($eventSubscriber); $firstTab = true; $locales = $this->localeManager->getActiveList(); $administrator = $this->getTokenStorage()->getToken()->getUser(); if ($administrator instanceof Administrator) { usort($locales, [$administrator, 'sortLocales']); } foreach ($locales as $localeData) { $tabName = $localeData->getName(); if (strlen($this->tabName) > 0) { $tabName = str_replace('%locale_name%', $localeData->getName(), $this->tabName); } $tabOptions = []; if ($this->isDisabledByAdministratorLocales($localeData->getAlias())) { $tabOptions = ['class' => 'disabled']; } $this->formMapper->with($tabName, $tabOptions); foreach ($this->fields as $fieldData) { if (!$firstTab && (!isset($fieldData['options']['translatable']) || !$fieldData['options']['translatable'])) { continue; } $fieldName = $fieldData['name']; if (isset($fieldData['options']['translatable'])) { if ($fieldData['options']['translatable']) { $fieldName = 'translation___' . $fieldData['name'] . '___' . $localeData->getAlias(); $fieldData['options']['mapped'] = false; if (isset($fieldData['options']['locale'])) { $fieldData['options']['locale'] = $localeData->getAlias(); } $fieldData['options']['disabled'] = $this->isDisabled($localeData->getAlias(), $fieldData['options']); if ($localeData->getAlias() != $this->localeManager->getDefaultLocaleAlias()) { //убираем обязательность полей для языков $fieldData['options']['required'] = false; if (!empty($fieldData['options']['inner_constraints'])) { foreach ($fieldData['options']['inner_constraints'] as $key => $value) { if ($value instanceof FileNotBlank) { unset($fieldData['options']['inner_constraints'][$key]); } } } } } unset($fieldData['options']['translatable']); } $this->formMapper->add($fieldName, $fieldData['type'], $fieldData['options'], $fieldData['fieldDescriptionOptions']); } $this->formMapper->end(); $firstTab = false; } return $this->formMapper; }
public function getLocales() { return $this->manager->getActiveList(); }