«

»

Mar 06

Yii1 – 2 boutons d’action sur un formulaire

Il arrive qu’il soit nécessaire d’avoir besoin de deux boutons d’action ou plus sur un formulaire.
Il faut donc pouvoir distinguer laquelle des actions a été exécutés.

Partons du principe que l’on souhaite afficher le formulaire en création, pour cela nous allons appeler l’action create.
L’action create va rediriger l’utilisateur vers la vue « form »

Vue

Au niveau de la vue, on peut définir les 2 boutons comme suit :

....
<?php echo CHtml::submitButton('Actualiser', array('name' => 'btnActualisé')); ?>
 
....
<?php echo CHtml::submitButton('Valider', array('name' => 'btnValider')); ?> 
...

Contrôleur

Au niveau du contrôleur, il faudra distinguer les 3 cas possibles :

  • affichage de la page la 1ère fois
  • ré-affichage de la page suite à une action (bouton Actualiser dans notre exemple)
  • redirection vers une autre page après avoir exécuter les opérations souhaitées : sauvegarde en base de données par exemple.

C’est dans le contrôleur que l’on distingue depuis quel bouton l’action a été demandée.

....
public function actionCreate() {
 
  // le formulaire est associé à un modèle 
  $model = new MaClasseModel();
 
  if(isset($_POST['MaClasseModel']))
  {
      // Récupération des informations saisies sur la page
        $model->attributes=$_POST['MaClasseModel'];  
  }
 
  if (isset($_POST['btnActualisé']))
  {
    // Si le bouton Actualiser vient d'être utilisé
    ... // Faire une action
    // puis revenir sur la page en gardant les informations préalablement saisies 
        $this->render('form',array('model'=>$model));
 
  } else if (isset($_POST['btnValider']))
        {
           //  Action a exécuter et retour sur la page d'accueil par exemple
           $this->render('index');
        } else  // C'est la 1ère fois que la page est ouverte
            $this->render('form',array('model'=>$model));
 }
 
...

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser les balises HTML suivantes : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>