Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Creare un form: la classe CFormModel

La rappresentazione di un web form in un'applicazione Yii.
La rappresentazione di un web form in un'applicazione Yii.
Link copiato negli appunti

Come già avevo anticipato poco prima nel corso di questa guida, il concetto di Model in Yii si suddivide in CActiveRecord, del quale abbiamo già parlato nella lezione precedente, e di CFormModel, che in Yii è un modo semplice e veloce di rappresentare e manipolare i form. Grazie a questa classe è possibile realizzare in modo semplice e veloce form perfettamente funzionanti. Grazie ad un model di tipo form saremo in grado di

  • Avere una rappresentazione sotto forma di classe PHP del form di cui vogliamo raccogliere i dati.
  • Avere svariate action nel nostro controller per gestire tutte le fasi di un form (verifica dei dati, invio dei dati, messaggi di errore).
  • Avere un file di tipo vista nel quale con poche righe di codice, rappresentare il nostro form.

Come esercizio proviamo la creazione di un banale form per la raccolta dei dati anagrafici di una persona. Il nome del file, che ricordo va posizionato sempre nella cartella model, è RubricaForm.php. Il nome è composto dai termini "Rubrica" e "Form", cosa che ci aiuta a capire immediatamente che parliamo del:

  • model rubrica;
  • che è un model di tipo CFormModel;

Il nome della classe sarà uguale al nome del file. La nostra classe deve avere la seguente base di partenza:

class telefono extends CFormModel{
public $nome;
	public $cognome;
	public $telefono;
}

Come si vede non abbiamo fatto altro che aggiungere tre proprietà alla nostra classe, che ovviamente rispecchieranno i nomi dei campi del form stesso. Gli autori di Yii specificano che non si tratta di vere proprietà, ma piuttosto di attributi. Ogni attributo rappresenta una proprietà in cui vengono gestite le informazioni inviate mediante il form(un attributo per ogni campo).

Uno dei passaggi principali per la gestione del form è la validazione dei dati inviati. Anche in questo caso il metodo che si occupa della cosa è il metodo rules.

public function rules()
	{
		return array(
		array('nome, cognome, telefono', 'required'),
		array('nome, cognome, telefono', 'length','max'=>255),
		);
	}

Nel nostro caso le regole di validazioni sono abbastanza intuitive. Ci preoccupiamo infatti solo che i campi non siano vuoti e che la loro lunghezza massima sia pari 255 caratteri. Valgono per i CFormModel gli stessi concetti espressi in merito la validazione di CActiveRecord.

A questo punto ci si chiede se ci sia a disposizione un sistema rapido e veloce affinché i nostri attributi siano valorizzati con i campi che arrivano dal form. Normalmente siamo abituati a leggere i nomi dei campi del form utilizzando la seguente sintassi:

$nome = $_POST['nomecampo'];

In Yii i nomi dei campi sono leggermente più complessi. Facendo riferimento al nostro esempio - stiamo considerando un form di tipo "post" - ci ritroveremo un form i cui campi hanno un nome nel seguente formato:

$_POST['RubricaForm']['nome']
$_POST['RubricaForm']['cognome']
$_POST['RubricaForm']['telefono']

Fatta questa premesse il modo più semplice per valorizzare i nostri attributi con i campi del form è banalmente:

public function generic(){
	$model = new RubricaForm();
	if(!empty($_POST['RubricaForm']))
		$model->attributes = $_POST['RubricaForm'];
}

Come si vede è sufficiente fare una semplice assegnazione. Questo genere di assegnazione viene definita "massiva". In pratica, riferendoci all'ultima riga di codice, ogni attributo del nostro model viene valorizzato con il corrispettivo valore contenuto nell'array associativo $_POST['RubricaForm']. Bisogna prestare attenzione che l'assegnazione massiva funziona solo con gli attributi di tipo "safe". In merito si vede la sezione relativa alla validazione nel paragrafo CActiveRecord.

A questo punto non ci resta che validare i dati e proseguire con le nostre operazioni:

$model->validate()

Ti consigliamo anche