2012-12-04 18 views
5

Ho un collegamento di eliminazione nel mio modello di ramoscello e vorrei sapere se c'è un modo Symfony2 per visualizzare la finestra di conferma.Symfony e Twig: Come visualizzare una finestra di conferma

So che questo è possibile con JQuery, ma forse symfony ha il suo "modo di fare".

Grazie.

+0

Non penso che ci sia qualcosa di simile in symfony2. –

+0

@habeebperwad, grazie per la tua opinione. –

risposta

11

Basta usare confirm funzione javascript sul tuo link di cancellazione

<a href="{{ path('delete_route', {csrf:...}) }}" onclick="return confirm('are u sure?')">delete</a> 
+1

Grazie, l'ho aggiunto, ma se clicco Ok o Annulla, il risultato è lo stesso, il mio controller elaborerà l'azione di cancellazione. –

+1

Hai altri gestori di clic associati a questo link? Il tuo browser non dovrebbe andare a cancellare la pagina se il pulsante Annulla ha fatto clic e il falso restituito da 'conferma ('sei sicuro?')' – Ziumin

+0

In effetti, il link di cancellazione è incorporato in un pulsante immagine. Modificherò la mia domanda con il codice ramoscello del mio pulsante di cancellazione. –

5

So che questo argomento è un po 'vecchio, ma ho usato un altro modo per visualizzare il messaggio di conferma prima di eliminare un oggetto.

Penso che sia interessante condividere con persone che cercano un'altra soluzione rispetto a javascript.

È un po 'più complicato, o almeno più lungo della soluzione di cui sopra.

Prima aggiungo queste azioni al mio controler

public function confirmAction(Capteur $myobject) { 
    // check my object exist 
    if (!$myobject) { 
     // throw error 
    } else { 
     // you can pass information about your object to the confirmation message 
     $myobjectInfo = array(
      'yes' => 'path_if_confirm', // path to the deleteAction, required 
      'no' => 'path_if_dont_confirm', // path if cancel delete, required 
      // put any information here. I used type, name and id 
      // but you can add what you want 
      'type' => 'mytype', 
      'id' => $myobject->getId(), // required for deleteAction path 
      'name' => $myobject->getName() 
     ); 
     // add informations to session variable 
     $this->get('session')->set('confirmation',$myobjectInfo); 
     return $this->redirect($this->generateUrl('confirmation_template_path')); 
    } 
} 
public function deleteAction(MyType $myobject) { 
    if (!$myobject) { 
     // throw exception 
    } else { 
     $request = $this->get('request'); 
     if ($request->getMethod() == 'POST') { 
      $em = $this->getDoctrine()->getManager(); 
      $em->remove($myobject); 
      $em->flush(); 
      $this->get('session')->getFlashBag()->add('success', 'Nice shot.'); 
     } else { 
       // you can do something here if someone type the direct delete url. 
     } 
    } 
    return $this->redirect($this->generateUrl('where_you_want_to_go'));  
} 

Quindi, nel mio modello con la mia lista di oggetti, io puntare il pulsante Elimina per confirmAction.

Poi nella confirmation_template (o nel mio caso nella parte superiore del genitore modello layout.hml.twig) aggiungo questo

{% if app.session.get('confirmation') is defined and app.session.get('confirmation') is not null %} 
    <div> 
     <p> 
     put your message here. You can use information passed to the session variable {{ app.session.get('confirmation').type }} {{ app.session.get('confirmation').name }} {{ app.session.get('confirmation').id }} etc.. 
     </p> 
     <form method="post" action="{{ path(app.session.get('confirmation').yes,{'id':app.session.get('confirmation').id }) }}"> 
      <button type="submit" class="btn red">confirm and delete</button> 
     <a href="{{ path(app.session.get('confirmation').no) }}" class="btn blue">Cancel</a> 
     </form> 
    </div> 
    # put confirmation variable to null, to disable the message after this page # 
    {{ app.session.set('confirmation',null) }} 
{% endif %} 

ho messo questi codice ramoscello nel mio modello superiore al fine di riutilizzare il messaggio per qualsiasi oggetto voglio Se voglio cancellare un altro tipo di oggetto, uso semplicemente le informazioni passate nella variabile di sessione per personalizzare il messaggio e i percorsi. Se si passa all'URL diretto, l'oggetto non verrà eliminato.

Non so se è il modo migliore per farlo. I tuoi consigli saranno apprezzati.

Grazie.

Problemi correlati