Per chiudere il cerchio rimane da gestire l'elaborazione del form stesso. Riprendiamo il metodo formAction()
scritto poc'anzi nel controller Login, e lo estendiamo come segue:
[...]
public function formAction() {
//Creo un oggetto form configurato come abbiamo precedentemente visto
$frmLogin = new Form_LoginForm();
//Verifichiamo che la richiesta sia di tipo POST
if ( $this->getRequest()->isPost() ) {
//Se il form è valido, lo processiamo
if ( $frmLogin->isValid($_POST) ) {
//recuperiamo i dati così .....
$nomeUtente = $this->getRequest()->getParam('username');
$password = $this->getRequest()->getParam('password');
//....o così, a seconda di come ci troviamo più comodi
//$dati = $frmLogin->getValues();
// processiamo la richiesta
}
}
//Assegnamo alla view una istanza del nostro oggetto form
$this->view->form = $frmLogin;
}
[…]
Il primo controllo verifica che la richiesta ricevuta dal controller Login sia stata effettuata come ci aspettiamo attraverso il metodo POST. Il controllo successivo invece verifica che il form sia stato validato correttamente. Se risultano verificati entrambi i controlli si può procedere con il processare i dati ricevuti, nel nostro caso il nome utente e la password.
Come vediamo dal codice, possiamo recuperare i parametri inviati dal form in due modi: singolarmente attraverso il metodo getParam()
dell'oggetto "richiesta" (request
) o utilizzare il metodo getValues
del form che li recuperare tutti insieme restituendoli in un'unica struttura dati.
Conclusioni
L'esempio che abbiamo visto tratta una minima parte delle funzionalità e delle caratteristiche dei componenti Zend_Form, Zend_Filter e Zend_Validate. Non possiamo approfondire oltre il discorso, ma vale la pena fare altre due osservazioni.
La prima riguarda i "decoratori": questi particolari oggetti permettono di personalizzare praticamente ogni caratteristica dell'aspetto dei form e dei loro sotto-elementi. Attraverso i decoratori e qualche riga di css si possono creare degli effetti davvero interessanti.
La seconda riguarda la gestione grafica del form. ZF è predisposto per supportare alcuni dei più utilizzati framework javascript dedicati allo sviluppo di applicationi RIA (Rich Internet Application). Ad esempio il supporto a Dojo è praticamente nativo: all'interno di ZF infatti è disponibile un componente, Zend_Dojo
, attraverso il quale possiamo far interagire i due framework. Potremmo ad esempio riscrivere il form che abbiamo visto utilizzando Zend_Dojo per la creazione delle caselle di testo, ottenendo così i tipici effetti delle interfacce utente di ultima generazione.