/** * Updates base fields using translations * * @param TranslatedPersonalEntityInterface $entity */ protected function updateFields(TranslatedPersonalEntityInterface $entity) { $entity->setTranslatableLocale($this->translationsHelper->getDefaultLocale()); foreach ($entity->getTranslations() as $translation) { /** @var AbstractPersonalTranslation $translation */ if ($translation->getLocale() == $entity->getLocale()) { $method = 'set' . ucfirst($translation->getField()); if (method_exists($entity, $method)) { call_user_func(array($entity, $method), $translation->getContent()); } } } }
/** * Builds form * * @param FormBuilderInterface $builder * @param array $options */ public function buildForm(FormBuilderInterface $builder, array $options) { foreach ($this->translationsHelper->getLanguages() as $locale => $name) { $builder->add($locale, @$options['field_type'], array_merge($options['field_options'], array('label' => $name, 'required' => $locale == $this->translationsHelper->getDefaultLocale() ? $options['required'] : false))); } $transformer = new TranslationFieldDataTransformer(); $transformer->setCultures(array_keys($this->translationsHelper->getLanguages()))->setField($builder->getName())->setDefaultCulture($this->translatableListener->getDefaultLocale()); // Adds transformer $builder->addModelTransformer($transformer); // On PreSet data - build translations $builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) use($transformer) { $form = $event->getForm(); $parentForm = $form->getParent(); if ($parentForm->getData()) { $transformer->setObject($parentForm->getData()); } }, -10); // On PostSet data - persist translations $builder->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) use($transformer) { foreach ($transformer->getFieldTranslations() as $translation) { $this->entityManager->persist($translation); } }, -10); }