我要访问与实体“媒体”相关的表单内的(媒体的)实体实例,该实体与与实体“项目”相关的表单有关。如何访问该实体实例?
我已经在网上发现有人在谈论这样的事件回调:
$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'