Dopo aver visto come sia possibile manipolare i dati e come mostrarli a video, è giunto il momento di vedere come possiamo raccoglierli. Yii mette a disposizione, tra le tante classi di helper, una classe che ci consente di creare in pochi semplici passi un form perfettamente funzionante. In questa fase faremo riferimento ai file che abbiamo generato all'inizio con il modulo Yii.
Verifichiamo innanzitutto che nelle regole del nostro model i campi user, password e mail siano di tipo obbligatorio. Dovremmo trovare una riga di questo tipo:
array ('user, password, mail', 'required'),
Questa riga ci consentirà di verificare la gestione degli errori del form.
Effettuate il login - poiché le operazioni CRUD sono permesse solo agli utenti registrati - e puntate il vostro browser alla pagina che consente di creare un nuovo utente. Dovrebbe essere /user/create. Il file che genera quello che visualizziamo è situato nella cartella /views/user/_form.
Senza preoccuparci di quello che è scritto nel file, proviamo ad inviare il form senza riempire i campi. Come vedrete vi saranno mostrati a video gli errori in base alle regole definite nel model. A prescindere dallo stile, che è quello fornito da Yii e che potete tranquillamente personalizzare, noterete come, con poche righe di codice, avrete un form, con tanto di gestione degli errori, in meno di 40 righe di codice.
Nel file _form.php modificate la seguente riga di codice
'enableAjaxValidation'=>false,
in
'enableAjaxValidation'=>true,
nel file userController.php individuate e decommentate la seguente riga di codice
$this->performAjaxValidation($model);
infine aggiungete
array ('user, password, mail', 'length', 'min'=>8),
alle regole del nostro model.
Richiamate nuovamente la pagina per l'inserimento di un nuovo utente e provate a scrivere "ciro" nella casella user. Noterete che alla pressione del tasto tab, o in ogni caso quando la casella user perde il focus, viene effettuata una validazione dei dati utilizzato una chiamata Ajax. Considerando che abbiamo apportato giusto qualche modifica direi che non è male.
A questo punto è giunto il momento di analizzare del come tutto questo sia possibile e per farlo dobbiamo analizzare il file _form.php di cui abbiamo parlato all'inizio del capitolo. Tralasciano i vari tag HTML che poco ci interessano, notiamo che, all'inizio e alla fine del file, è presente un widget che ci consente di creare un blocco form all'interno della nostra vista.
$form=$this->beginWidget('CActiveForm', array(
'id'=>'user-form',
'enableAjaxValidation'=>true,
));
È interessante notare che si tratta di un active form, cioè un widget dedicato alla creazione di form complessi in modo semplice e veloce. Guardando il codice scritto sopra appare evidente che il primo parametro indica il tipo di widget mentre il secondo, in questo caso, rappresenta una serie di parametri utili alla creazione del form. In questo specifico caso diciamo ad Yii di attribuire all'attributo id del form il valore "user-form" e di abilitare la validazione ajax.
La seguente riga di codice
echo $form->errorSummary($model);
ci consente di vedere il riepilogo degli errori.
Tutti i metodi presenti nella pagina legati all'oggetto form sono dei wrapper della classe ausiliare CHtml
. Questa classe consente di generare gli oggetti tipici di una pagina HTML quali button, label, campi di testo etc. Nel caso dell'ActiveForm questi campi, sono legati ad una proprietà del model stesso. Prendiamo ad esempio le seguenti righe di codice:
<?php echo $form->labelEx($model,'user'); ?>
<?php echo $form->textField($model,'user',array('size'=>60,'maxlength'=>255)); ?>
<?php echo $form->error($model,'user'); ?>
Il primo metodo fornisce una label il cui valore è quello definito all'interno del metodo attributeLabels
del nostro model. Il metodo textField
genera un campo di testo per il campo user, con le proprietà indicate nel secondo parametro. Per finire error
visualizza gli errori relativi al campo user a seguito della validazione.