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.
Non penso che ci sia qualcosa di simile in symfony2. –
@habeebperwad, grazie per la tua opinione. –