Резюме
Я хочу получить доступ к экземпляру объекта (Media) внутри формы, связанной с объектом "Media", который связан с формой, связанной с объектом "Project". Как я могу получить доступ к этому экземпляру сущности?
Что я пробовал
Я уже обнаружил в сети, что некоторые люди говорили об обратном вызове события, как это:
$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'