Oltre a capire come funziona questo framework, mi piacerebbe anche capire come programmare decentemente.
Ora io mi sono avvicinato a Yii perchè ho letto che l’MVC è implementato in maniera magistrale.
Ma non riesco ad usarlo, sono bloccato nel passaggio dati tra controller e modello.
Non ho capito come si faccia.
Esempio pratico. Prendiamo un controller per la gestione della registrazione di un nuovo utente:
class IscrizioneController extends Controller
{
public function actionIndex()
{
if(isset($_POST['submit']))
{
$obj = new NewUser();
$errore = $obj->AddUser(); //0 ho salvato con successo; >= 1 errore di qualcosa
} else $errore = -1; //nessun errore
$this->render('index', array('content'=>$errore)); //visualizzo il form, eventualmente con l'errore rilevato
}
}
bene il passaggio tra controller e view è una figata: basta passare l’array nella funzione render, e dall’altra parte (nella view) avrò tutte le variabili che mi servono. Fantastico!
Invece per il modello, non ho capito come si lavori.
Leggo dalle best practice:
i model dovrebbero contenere la logica di funzionamento (es. regole di validazione)
per assicurare la piena corrispondenza dei dati alle esigenze di progetto;
In generale i model non dovrebbero contenere logica che abbia a che fare
direttamente con gli utenti finali. Più in dettaglio, i model:
- non dovrebbero utilizzare
$_GET
,$_POST
o varaibili simili che sono
direttamente legate alle richieste dell’utente finale.
Allora io mi e vi domando, ma come faccio ad implementare le regole di validazione se non dovrebbero utilizzare $_get e $_post ?
Per meglio documentare il mio dramma, riporto un pezzo di model che ho mal implementato:
class NewUser extends User
{
public function AddUser()
{
return $this->ErrorReport(); //ritorna 0 se ha salvato ok ; 1 se IsEmptyField ; 2 se la mail è errata
}
protected function IsEmptyField()
{
if(empty($_POST['username']) OR empty($_POST['email']) OR empty($_POST['password']))
{
return TRUE;
}
else
{
return FALSE;
}
}
Come potete vedere, il modello non rispetterebbe le best practice perché contiene dei $_post. Come faccio ad implementare la logica di controllo?
[font="arial, verdana, tahoma, sans-serif"]
[/font]
[font="arial, verdana, tahoma, sans-serif"]Esiste un modo di passare i dati tra controller e model, come lo si fa tra controller e view? Voi come lavorate? Ogni spunto, idea è ben accetto.[/font]