Funzionante. Vedi aggiornamento qui sotto:Symfony2 Aggiornamento entità modulo
Qualcuno può per favore mostrarmi un esempio specifico di aggiornamento dell'entità modulo di Symfony2? Il libro mostra solo come creare una nuova entità. Ho bisogno di un esempio di come aggiornare un'entità esistente in cui inizialmente passo l'id dell'entità sulla stringa di query. Ecco cosa ho attualmente ma non funziona perché sovrascrive l'entità quando il modulo viene pubblicato. Immagino che la cosa che ho difficoltà a capire sia come accedere nuovamente al modulo nel codice che controlla un post senza ricreare il modulo. E se riesco a ricreare il modulo, significa che devo interrogare ancora per l'entità, il che non sembra avere molto senso.
public function updateAction($id)
{
$em = $this->getDoctrine()->getEntityManager();
$testimonial = $em->getRepository('MyBundle:Testimonial')->find($id);
$form = $this->createForm(new TestimonialType(), $testimonial);
$request = $this->get('request');
if ($request->getMethod() == 'POST') {
$form->bindRequest($request);
echo $testimonial->getName();
if ($form->isValid()) {
// perform some action, such as save the object to the database
//$testimonial = $form->getData();
echo 'testimonial: ';
echo var_dump($testimonial);
$em->persist($testimonial);
$em->flush();
return $this->redirect($this->generateUrl('MyBundle_list_testimonials'));
}
}
return $this->render('MyBundle:Testimonial:update.html.twig', array(
'form' => $form->createView()
));
}
UPDATE: ora di lavoro. Dovuto modificare un paio di cose:
public function updateAction($id)
{
$request = $this->get('request');
if (is_null($id)) {
$postData = $request->get('testimonial');
$id = $postData['id'];
}
$em = $this->getDoctrine()->getEntityManager();
$testimonial = $em->getRepository('MyBundle:Testimonial')->find($id);
$form = $this->createForm(new TestimonialType(), $testimonial);
if ($request->getMethod() == 'POST') {
$form->bindRequest($request);
if ($form->isValid()) {
// perform some action, such as save the object to the database
$em->flush();
return $this->redirect($this->generateUrl('MyBundle_list_testimonials'));
}
}
return $this->render('MyBundle:Testimonial:update.html.twig', array(
'form' => $form->createView()
));
}
Questo sembra simile al codice che uso per la modifica entità esistenti. Puoi essere un po 'più chiaro riguardo al tuo problema? Non ho idea di cosa intendi per '... non funziona perché sovrascrive l'entità ...' – Problematic
La seconda riga nella funzione che cattura la testimonianza tenta di eseguire una ricerca in base all'ID $ passato. Non ne trova uno quando si verifica il POST e quindi restituisce null per $ testimonial. Ho appena provato a cambiare il mio codice per cercare il campo nascosto nel mio modulo chiamato 'id' quando si verifica il post. Sembrava che mi spingesse un po 'oltre, ma poi mi sono lamentato del fatto che l'identità nella mia entità fosse privata e mi suggeriva di creare un metodo setId() nella mia entità. Apparentemente la console non ne ha creato uno per me per qualche motivo. –
Funziona. Vedi l'aggiornamento nel post sopra. –