rav
rav

Reputation: 90

Symfony Selection of Entity using Doctrine

i need some help. I have a Form where i would like to either choose an existing Entity or submit a new one. So i have a Class Dolmetscher (Interpreter for languages) with title, name, surname and language. To create the Form i have a Class InterpreterType with the function

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'
                )
    ));
}

So i have a selection with Entities, which is working, with a 'select' Button and Form fields for a new Dolmetscher with a 'save' Button. Also a 'reset' Button

My Controller Class looks like

/**
 * @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'
    ]);
}

I want to put the Dolmetscher from the selection into $_SET for later use ,e.g. persist in DB, which works fine for a new Dolmetscher but not for my selection. I get an Exception

Serialization of 'Closure' is not allowed

I'm not sure if I'm doing this right at all (I have some OneToMany Relations and wanted to have a view for each Entity/Form and persist everything at once at the end so that i don't have only a Dolmetscher in my DB when the user quits in mid process)

I also thought it might be possible to populate the Form fields from the selection which I couldn't get to work. Can someone please help me, i would appreciate it.

Upvotes: 1

Views: 66

Answers (1)

zizoujab
zizoujab

Reputation: 7800

This part of code is probably the origin of your problems :

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

you are trying to serialize a form object which contains a closure. Closure can not be serialized ( visit this link for more insights Exception: Serialization of 'Closure' is not allowed )

If you dump $dolmetscher variable you will probably get a form object not the entity you want. try to replace the line :

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

with :

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

Upvotes: 1

Related Questions