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

Controller

Il modo magistrale in cui Yii implementa il pattern MVC: il Controller
Il modo magistrale in cui Yii implementa il pattern MVC: il Controller
Link copiato negli appunti

A questo punto è giunto il momento di analizzare come Yii implementa il pattern MVC. Analizzeremo quindi il controller, le viste e per finire i model. Questi oggetti rappresentano il cuore della nostra applicazione.

Nella lezione precedente abbiamo creato, mediante il modulo gii, il controller, le viste e il model necessari alla gestione della tabella "user" del database. Per spiegare il funzionamento del pattern MVC in Yii faremo riferimento a questi file. Prima di proseguire è bene che sappiate che in questi paragrafi si da per scontato che sappiate cosa si intende per pattern MVC e del suo funzionamento.

Controller

Cominciamo col dire che tutti i controller si trovano nella cartella application.controllers (è un alias) ed hanno un nome che è composto generalmente dal nome del model più il suffisso controller, sempre nel formato camel. Come noterete, per raggiungere un controller, è sufficiente digitare nella barra degli indirizzi www.miohost.com/miocontroller: quindi il nome, tutto in minuscolo, senza il suffisso controller.

Sarà compito di Yii in base all' uri, stabilire quali file richiamare. Preciso che possiamo usare l'uri precedente solo se abbiamo configurato correttamente il file di configurazione main.php e modificato il file .htaccess come spiegato nelle lezioni precedenti. Qualora non abbiate configurato il file .htaccess, l'uri precedente diventa: www.miohost.com/index.php/miocontroller.

Aprendo il file UserController.php noteremo immediatamente che il controller è una classe che estende la classe base Controller. Ogni controller è dotato di una serie di azioni che altro non sono che un insieme di metodi il cui nome ha il prefisso action. Le azioni possono essere richiamate aggiungendo all'uri precedente "/nomeAzione" ovviamente senza il prefisso action e senza virgolette. Qualora all'uri non venga passata nessuna azione, il controller esegue l'azione predefinita che generalmente è index. Questo comportamento può essere modificato settando la proprietà defaultAction ad un valore diverso.

public $defaultAction  = "nuovaAzionePredefinita";

In Yii il nome del controller, così come quello delle azioni, rappresenta quindi l'identificativo di tali elementi. Per cui potremmo dire che per richiamare un'azione di un controller basta aggiungere all'uri di base IDController/IDAzione.

Qualora Yii non riesca ad individuare un controller, o un'azione, con l'id passato nella uri, verrà mostrato a video il classico errore 404.

Lo scopo ultimo del controller è quello di rendere una vista all'utente finale, magari a seguito di un' elaborazione di dati forniti dallo stesso. Yii consente di ricevere i parametri passati mediante GET in una action, semplicemente passandoli come parametri del metodo stesso.

Ad esempio se volessimo passare user e password al metodo login del controller user, dovremmo scrivere l'url nel seguente modo: www.miohost.com/user/?user=ciro&password=test.

Il metodo login quindi avrebbe la seguente firma

public function actionLogin($user,$password)

È possibile passare un valore di default ai parametri. Questo serve ad evitare un errore 400 qualora si ometta di passare il parametro mediante GET. I parametri dell'action possono essere anche degli array. In tal caso la firma diverrebbe:

public function actionMetodo(array $campo)

Fino ad ora abbiamo considerato le azioni solo come metodi del nostro controller. Yii mette a disposizione un sistema mediante il quale è possibile definire le azioni come metodi di una classe esterna. La prima cosa da fare è quella di effettuare un override del metodo actions in esso si definisce un array che contiene l'insieme della azioni personalizzate.

L'array è di tipo associativo e in esso la chiave rappresenta l'identificativo dell'azione, nel nostro caso login, mentre il valore della chiave indica il path al file che contiene la definizione dell'azione stessa.

public function actions()
	{
		return array(
			'login'=> 'application.components.login'
		);
	}

login rappresenta una classe che estende la classe base actions ed ha un unico metodo chiamato run.

La forma della classe è :

class login extends CAction
{
	public function run()
	{
		echo "Ciao mondo";
	}
}

In base a quanto detto il codice appena sopra va inserito in un file "login.php" nella cartella components.

Di notevole importanza è il metodo filters. Questo metodo, che è il primo generato dal modulo gii per il controller user, consente di eseguire azioni prima e dopo la action del controller. Un esempio molto semplice è proprio quello che troviamo nel controller User: in esso filters restituisce accessControl. Quest'ultimo è un componente di Yii che in base a determinate regole, definite in questo caso nel metodo accessRule, consente di stabilire se un utente ha o meno i permessi di eseguire una determinata azione.

Come si vede da UserController il metodo accessRule è abbastanza semplice. Si tratta di un array formato da array. Ognuno di essi ha tre elementi :

  • controllo: è il primo valore e può essere allow or deny
  • actions: non è obbligatorio ma se presente il suo valore è un array con gli id delle azioni
  • user: indica a quale utente deve essere applicata la regola e può assumere i seguenti valori
    • *: tutti gli utenti
    • admin: l'utente admin
    • @: utenti autenticati

Altri due metodi interessanti del controller di esempio sono loadModel e performAjaxValidation. I due metodi hanno nomi abbastanza intuitivi ad ogni modo il primo consente di caricare il model in base ad un determinato id mentre il secondo effettua la validazione ajax del form user. Al momento queste cose potrebbero non esservi chiare. Chiariremo il tutto quando parleremo del model. Inoltre ritorneremo a parlare dei controller e dei suoi metodi anche quando parleremo delle viste.

Ti consigliamo anche