2016-10-31 7 views
0

Ich habe Probleme beim Aktualisieren eines Formulars mit zwei Entitäten ("Event" und "Info") in symfony.Alles funktioniert einwandfrei, bis der Benutzer versucht, die Informationen zu aktualisieren . Wenn sie es alle tun, wie neue Datenbankeinträge gespeichert.Symfony 3.1: Formular bearbeiten erstellt neuen Datenbankeintrag anstatt zu aktualisieren

public function editAction(Request $request, Event $event) 
{ 
    $user = $this->getUser(); 

    $editForm = $this->createFormBuilder() 
     ->setMethod('PUT');  

    $editForm->add("event", 'AppBundle\Form\EventType'); 
    $editForm->add("info", 'AppBundle\Form\InfoType'); 

    $editForm = $editForm->getForm(); 
    $editForm->handleRequest($request); 

    if ($editForm->isSubmitted() && $editForm->isValid()) { 
     $em = $this->getDoctrine()->getManager(); 
     $formEvent = $editForm->get('event')->getData(); 

     echo "Debug<br />"; 
     echo "form id: ". $formEvent->getId(); // Wrong. Returns null. 
     echo "<br /> event id: ". $event->getId(); // The correct id of entity that should be updated. 

     $em->merge($formEvent); 
     $em->flush();  
    } else { 
     $editForm->get('event')->setData($event); 
    } 

    return $this->render('event/edit.html.twig', array(
     'event' => $event, 
     'edit_form' => $editForm->createView() 
    )); 

ich einige Debug-Informationen echo und handle(), um die neuen Informationen in die Ereignis-Einheit Karte tun gefunden in $ editForm-> get (‚Ereignis‘) mit der Ausnahme, dass die ID fehlt, von der ich annehme, dass sie etwas mit der Erstellung der neuen Entität zu tun hat, anstatt zu aktualisieren. Was ist los?

Routing: event_edit: path: /{id}/edit defaults: { _controller: "AppBundle:Event:edit" } methods: [GET, POST, PUT]

Zweig:

{{ form_start(edit_form, {'attr': {'novalidate': 'novalidate'}}) }} 
    {{ form_errors(edit_form) }} 
    {{ form_widget(edit_form.event.title) }} 
    {{ form_widget(edit_form.info) }} 
    <input type="submit" value="Save" /> 
{{ form_end(edit_form) }} 
+0

Zeigen Sie uns die Routing-Konfiguration und die Vorlage - wir müssen wissen, wie der Controller seine Eingabedaten empfängt). –

+0

Hallo Mihai! Ich habe den Beitrag bearbeitet. – user2017748

Antwort

1

Wenn Ereignis Einheit ist die Einheit, die Sie mögen, aktualisieren und durch Lehre verwaltet (geladen wurde), müssen Sie Ereignis Einheit zum Formular zu übergeben. Versuchen Sie dies:

public function editAction(Request $request, Event $event) 
{ 
    $user = $this->getUser(); 

    $editForm = $this->createFormBuilder($event) 
     ->setMethod('PUT');  

    $editForm->add("event", 'AppBundle\Form\EventType'); 
    $editForm->add("info", 'AppBundle\Form\InfoType'); 

    $editForm = $editForm->getForm(); 
    $editForm->handleRequest($request); 

    if ($editForm->isSubmitted() && $editForm->isValid()) { 
     $em = $this->getDoctrine()->getManager(); 
     $em->persist($event); 
     $em->flush();  
    } 

    return $this->render('event/edit.html.twig', array(
     'event' => $event, 
     'edit_form' => $editForm->createView() 
    )); 
} 
+0

Scheint nicht funktionieren. Das $ -Ereignis enthält nur die ursprünglichen Daten und nicht das neue, das in der Anfrage gepostet wurde. – user2017748

Verwandte Themen