如何解决symfony 在设置数据后修改集合中的选择
我正在尝试构建一个表单,供用户输入他的考试答案。
表单由如下所示的答案集合组成:
class UserExamFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder,array $options)
{
$builder
->add('answers',CollectionType::class,[
'entry_type' => UserExamAnswerType::class,'allow_delete' => false,'allow_add' => false,])->add('submit',SubmitType::class,[
'label' => 'Zapisz','attr' => [
'class' => 'btn-success',],]
)->add('finish',[
'label' => 'Zapisz i zakończ','attr' => [
'class' => 'btn-danger confirmation','data-message' => 'Czy na pewno chcesz zakończyć test? Nie będzie możliwości poprawy odpowiedzi.'
],]
);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => UserExam::class,]);
}
}
class UserExamAnswerType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder,array $options)
{
// dump($builder->getData()); === null
$builder
->add('answer',EntityType::class,[
'class' => Answer::class,'choice_value' => 'id','expanded' => true,'query_builder' => function (EntityRepository $entityRepository) {
return $entityRepository->createQueryBuilder('a');
}
]);
$builder->addEventListener(FormEvents::POST_SET_DATA,function (FormEvent $event) {
dump($event->getData()); // !== null
//modify choices
});
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => ExamAnswer::class,]);
}
}
如何修改注释行中的选项?
我希望这些选择受到传递到表单中的对象的影响。
在 dump($event->getData()); // !== null
行中,我得到了确定选择所需的对象,但我没有找到任何相关信息 - 只是动态添加了一个字段。
解决方法
我终于在 Symfony 设置表单数据之前添加了一个元素。
也许有人会从中获利:
public function buildForm(FormBuilderInterface $builder,array $options)
{
$builder->addEventListener(FormEvents::PRE_SET_DATA,function (FormEvent $event) {
$event->getForm()
->add('answer',EntityType::class,[
'class' => Answer::class,'choice_value' => 'id','expanded' => true,'choices' => $event->getData()->getQuestion()->getAnswers()
]);
});
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。