Я нашел возможность доступа к данным сущности в FormType
с опцией property_path
.Пока PropertyAccessor находит соответствующее значение, следующий пример работает просто отлично.
class Tag
{
use Knp\Translatable;
// other properties
}
class TagTranslation
{
use Knp\Translation;
/** @ORM\Column(type="string") */
private $name;
}
class TagType extends AbstractType
{
// ...
private function getAdminLocale(): string
{
return $this->session->get('admin_locale');
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
// add other properties
$builder->add('translations', TagTranslationType::class, [
'property_path' => 'translations['.$this->getAdminLocale().']',
'constraints' => new Valid(),
]);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(['data_class' => Tag::class]);
}
}
Если PropertyAccessor не может найти что-либо в заданном property_path
, это похоже на форму SymfonyКомпонент создаст новый пустой TagTranslation
.Есть ли элегантный способ передать данные для строительства этого объекта или гидратировать его любым другим способом?Я попытался поэкспериментировать с empty_data
безуспешно.Для работы Knp Translations объекту TagTranslation
нужны как минимум значения для ->setLocale()
и ->setTranslatable()
.