Pillole PHP/Yii: far transitare parametri da HTTP alla pagina web

Spread the love

yiiDalla request alla pagina web

Grande è la tentazione di utilizzare i valori provenienti dalla $_REQUEST direttamente nella view, ma così facendo rischiamo di perdere pezzi per strada.

Il percorso corretto da compiere è questo

  $_REQUEST ---> controller ---> action ---> view.

Esempio, voglio far transitare una variabile $payment_id dal flusso HTTP alla pagina web

  index.php?r=voucher/create&payment_id=2

Step 1: dalla request al controller

Supponiamo di voler creare un nuovo record per l’oggetto voucher, che ha bisogno di essere agganciato al record payment_id=1

  • file VoucherController.php
   public function actionCreate()
   {
       $model=new Voucher;
       if(isset($_REQUEST['Voucher']))
       {
           $model->attributes=$_REQUEST['Voucher'];
           $payment_id = $model->payment_id;
           if($model->save())
               $this->redirect(array('index','id'=>$model->id, 'payment_id' => $payment_id));
       }
       else 
       {
           $payment_id = $_REQUEST['payment_id'];
       }
       $this->render('create',array(
           'model'=>$model,
           'payment_id' => $payment_id,
       ));
   }

con questo frammento valorizziamo la variabile da passare e la passiamo al metodo create nell’array dei parametri (il secondo parametro della funzione render).

Step 2: dal controller alla action

  • file voucher/create.php
   <?php echo $this->renderPartial('_form', array('model'=>$model, 'payment_id' => $payment_id)); >?>

il valore $payment_id è quello che arriva dalla funzione render citata sopra. Con questa istruzione passiamo al template _form.php l’array che contiene $model e $payment_id

Step 3: dalla action alla view

  • file voucher/_form.php
   <?php echo $form->hiddenField($model,'payment_id', array('value' => $payment_id)); ?>

questo è l’ultimo passaggio, siamo arrivati. L’html generato al volo conterrà questo campo hidden:

<input id=”Voucher_payment_id” type=”hidden” name=”Voucher[payment_id]” value=”2“>.

Segui tutto l’articolo sul Wiki.

Lascia un commento

Your email address will not be published.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.