Php 使用原则的实体的符号选择

Php 使用原则的实体的符号选择,php,forms,symfony,doctrine,Php,Forms,Symfony,Doctrine,我需要一些帮助。 我有一个表格,我想选择一个现有实体或提交一个新实体。所以我有一个类Dolmetscher(语言的解释器),有标题、名字、姓氏和语言。要创建表单,我有一个带有函数的类解释器类型 public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add('anrede', ChoiceType::class, array( 'choi

我需要一些帮助。 我有一个表格,我想选择一个现有实体或提交一个新实体。所以我有一个类Dolmetscher(语言的解释器),有标题、名字、姓氏和语言。要创建表单,我有一个带有函数的类解释器类型

public function buildForm(FormBuilderInterface $builder, array $options) {
    $builder->add('anrede', ChoiceType::class, array(
                'choices' => array(
                    'Herr' => 'Herr',
                    'Frau' => 'Frau'
                )
            ))
            ->add('vorname')
            ->add('nachname')
            ->add('sprache')
            ->add('dolmetscher', EntityType::class, array(
                'class' => 'AppBundle:Dolmetscher',
                'placeholder' => 'Dolmetscher wählen',
                'label' => 'Dolmetscher',
                'choice_value' => 'id',
                'choice_label' => function ($dolmetscher) {
                    return $dolmetscher->getAnrede() . ' ' .
                            $dolmetscher->getVorname() . ' ' .
                            $dolmetscher->getNachname();
                },
                'mapped' => false,
            ))
            ->add('select', SubmitType::class, array(
                'label' => 'Übernehmen',
                'attr' => array(
                    'class' => 'btn btn-default',
                    'formnovalidate' => 'formnovalidate'
                )
            ))
            ->add('save', SubmitType::class, array(
                'label' => 'OK',
                'attr' => array(
                    'style' => 'float: right',
                    'class' => 'btn btn-default'
                )
            ))
            ->add('reset', SubmitType::class, array(
                'label' => 'Zurücksetzen',
                'attr' => array(
                    'style' => 'float: right; margin-right: 10px',
                    'class' => 'btn btn-warning',
                    'formnovalidate' => 'formnovalidate'
                )
    ));
}
因此,我有一个与实体的选择,这是工作,与一个“选择”按钮和表单字段为一个新的Dolmetscher与一个“保存”按钮。还有一个“重置”按钮

我的控制器类看起来像

/**
 * @Route("/u01/5", name="u1_5")
 */
public function dolmetscherAction(Request $request) {
    $session = $this->get("session");
    var_dump($session->get("foo"));
    if (!$session->get("dolmetscher")) {
        $dolmetscher = new Dolmetscher();
    } else {
        $dolmetscher = $session->get("dolmetscher");
    }
    $dolmetscherForm = $this->createForm(DolmetscherType::class, $dolmetscher);
    $dolmetscherForm->handleRequest($request);

    if ($dolmetscherForm->get('select')->isClicked()) {
        $dolmetscher = $dolmetscherForm->get('dolmetscher');
        $session->set("dolmetscher", $dolmetscher);
        return $this->redirectToRoute('u1_5');
    }

    if ($dolmetscherForm->get('reset')->isClicked()) {
        $dolmetscher = new Dolmetscher();
        $session->set("dolmetscher", $dolmetscher);
        return $this->redirectToRoute('u1_5');
    }

    if ($dolmetscherForm->get('save')->isClicked() && $dolmetscherForm->isSubmitted() && $dolmetscherForm->isValid()) {
        $dolmetscher = $dolmetscherForm->getData();
        $session->set("dolmetscher", $dolmetscher);
        return $this->redirectToRoute('homepage');
    }

    return $this->render('urkunden/u01/5.html.twig', [
                'form' => $dolmetscherForm->createView(),
                'page_title' => 'U01'
    ]);
}
我想将所选内容中的Dolmetscher放入$_集中以备日后使用,例如,persist in DB,这对新的Dolmetscher很好,但对我的所选内容无效。我有个例外

不允许对“Closure”进行序列化

我不确定我是否做得对(我有一些OneToMany关系,希望每个实体/表单都有一个视图,并在最后一次保存所有内容,这样当用户中途退出时,我的数据库中就不会只有一个Dolmetscher)


我还认为可以从我无法工作的选择中填充表单字段。如果有人能帮助我,我将不胜感激。

这部分代码可能是您问题的根源:

if ($dolmetscherForm->get('select')->isClicked()) {
    $dolmetscher = $dolmetscherForm->get('dolmetscher'); <------ this one
    $session->set("dolmetscher", $dolmetscher);
    return $this->redirectToRoute('u1_5');
}
与:

 $dolmetscher = $dolmetscherForm->get('dolmetscher')->getData();

非常感谢你!我以为get()会得到子对象,所以实体是实体,但实际上必须调用getData()。这解决了我的问题,这是一个很好的方法,还是有一个你可以推荐的最佳实践?如果你不想在那里保存实体并将其延迟到你重定向请求的其他控制器,我看不到其他解决方案,然后使用会话。
 $dolmetscher = $dolmetscherForm->get('dolmetscher')->getData();