如何访问子表单中的实体实例?

时间:2019-05-07 14:39:43

标签: forms symfony4

摘要

我要访问与实体“媒体”相关的表单内的(媒体的)实体实例,该实体与与实体“项目”相关的表单有关。如何访问该实体实例?

我尝试过的事情

我已经在网上发现有人在谈论这样的事件回调:

$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) use ($builder) {
    /** @var YourEntity $data */
    $data = $event->getData();
});

但这只是当我们单击“添加”按钮时才有趣。 我希望我的实体在页面的第一显示上显示我的图像,以便用户可以查看并编辑它。

之后,用户可以添加其他图像,但这是另一回事。

我还发现有些人说将'allow_add'设置为false,但这并不能解决我的问题。

代码

这是我的两种形式。 格式Project

class Project extends AbstractForm
{
    use ArticleForm;
    use StatusForm;

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('medias', CollectionType::class, [
                'entry_type' => Media::class,
                'entry_options' => ['label' => false],
                'allow_add' => true,
                'allow_delete' => true
            ])
            ->add(
                'teaser',
                TextareaType::class,
                [
                    'label' => 'label.teaser',
                ]
            )
            ->add(
                'public',
                CheckboxType::class,
                [
                    'label' => 'label.public',
                ]
            );

        $this->builderAddTitleAndBody($builder);
        $this->builderAddStatus($builder, $options['data']);
        $this->builderAddSave($builder);
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => \App\Entity\Project::class,
        ]);
    }
}

还有Media形式:

class Media extends AbstractForm
{
    use EntityForm;

    public $formName = 'media';

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add(
                'file',
                FileType::class,
                [
                    'data'     => $this->entityFileInit($builder->getData(), 'file'),
                    'label' => 'label.picture',
                    'required' => false,
                    'mapped' => false,
                    'data_class' => null
                ]
            )
            ->add(
                'alt',
                TextType::class,
                [
                    'label' => 'label.alt',
                    'mapped' => false
                ]
            );
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(
            [
                'data_class' => \App\Entity\Media::class,
            ]
        );
    }
}

预期和实际结果

我希望Symfony至少进入模板,但是Symfony告诉我$ builder-> getData()返回'null'

0 个答案:

没有答案