lundi 13 juin 2011

formulaire : ajout de paramètre

Il peut arriver qu'un formulaire propose à l'utilisateur plusieurs boutons d'envoi, chacun ayant une signification différente. Par exemple un formulaire permettant pour l'écriture d'un message privé à destination d'un utilisateur, peut disposer d'un bouton 'envoyer' ainsi que d'un bouton 'sauvegarder'. Dans les deux cas, le formulaire pourra être traité par la même action, mais en fonction d'un paramètre additionnel, celle-ci procèdera uniquement à la sauvegarde du message (comme brouillon), ou bien sauvegardera puis enverra le message. La question est alors : comment rajouter ce paramètre ?
La solution proposée ici consiste à utiliser les paramètres de la méthode CHtml::submitButton() pour rajouter un paramètres GET à l'adresse d'envoi du formulaire. Ce paramètre (appellons-le 'envoi') a la valeur 1 ou 0 selon que l'on souhaite envoyer ou seulement sauvegarder (comme brouillon).

<div class="row buttons">
      <?php echo   
         CHtml::submitButton('Envoyer',array(
            // optionnel (pour le style)   
            'class' =>'button',
            // premier bouton : envoyer 
            // On utilise la paramètre 'submit' pour indiquer explicitement
            // l'adresse d'envoi du formulaire, et on en profite pour y
            // rajouter notre paramètre 'envoi=1'    
            'submit'=>$this->createUrl($this->route,array('envoi'=>1)),
         ));
      ?>         
      <?php echo 
         // second bouton : sauvegarder uniquement
         // Cette fois le paramètre 'envoi' est à 0
         CHtml::submitButton('Sauvegarder comme brouillon',array(
            'class' =>'button',
            // second bouton : sauvegarder uniquement
            // Cette fois le paramètre 'envoi' est à 0   
            'submit'=>$this->createUrl($this->route,array('envoi'=>0)),
         ));
      ?>     
   </div>


Côté contrôleur, c'est du classique : on rajoute le paramètres 'envoi' comme argument de l'action visée. Il sera automatiquement lié (bind) à la valeur de notre paramètre 'envoi'.
Bon, ça va pas chercher bien loin, mais ça peut toujours être utile ...
Pour aller plus loin :

Aucun commentaire:

Enregistrer un commentaire