2011-11-20 3 views
0

J'utilise un UrlHelper pour effectuer une action de suppression, comme ceci:Ajax avec symfony UrlHelper

<?php echo link_to('delete', '@foo_delete?id=' . $foo->id, array('method'=>'DELETE'))?>

qui génère toutes sortes de magie sortie javascript, et il fonctionne.

Maintenant, je me demande, est-il un moyen facile d'utiliser l'UrlHelper pour faire la même chose ajax style?

Merci!

Répondre

1

Le link_to_remote de Symfony 1.0 devient dépréciée. Ainsi, au lieu, vous pouvez installer le sfJqueryReloadedPlugin et utiliser le jq_link_to_remote()

<?php use_helper('jQuery'); 

<?php echo jq_link_to_remote('delete', array(
    'url' => '@foo_delete?id=1', 
    'confirm' => 'Are you sure?', 
    'csrf' => 1, 
    'method' => 'delete')) ?> 

Mais, il y a un problème avec ceci: sfJqueryReloadedPlugin ne supporte pas la méthode SUPPRIMER, donc ce que vous pouvez faire est un petit changement sur le plug-in. Dans plugins/sfJqueryReloadedPlugin/lib/helper/jQueryHelper.php où vous lisez:

if ((isset($options['method'])) && (strtoupper($options['method']) == 'GET')) $method = $options['method']; 

devrait être:

if ((isset($options['method'])) && (strtoupper($options['method']) == 'GET' || strtoupper($options['method']) == 'DELETE')) $method = $options['method']; 

(vient de proposer ce changement aux développeurs de plug-in)

0

Oui - vous pouvez ;-)

Voici un simple sceleton pour votre action:

/* is it an AJAX request ? */ 
if($request->isXmlHttpRequest()){ 
    /* do what you want to do */ 

    /* Text as result */ 
    return $this->renderText("All worked well with ajax"); 
} 

Bien sûr, vous pouvez utiliser JSON comme retour, en-tête HTTP spécifique ou d'autres améliorations. Cela dépend de votre implémentation JS.

Tout est très bien documenté: