在property_path选项访问的FormTypes中创建新实体

时间:2019-06-27 23:10:00

标签: php forms symfony localization

我发现可以使用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转换正常工作,TagTranslation对象至少需要->setLocale()->setTranslatable()的值。

0 个答案:

没有答案