O data ce avem un model, putem incepe sa scriem codul care este necesar pentru a ne folosi de model. Putem crea acest cod intr-un action al unui controller. Pentru exemplul cu formularul de logare, este necesar urmatorul cod:
public function actionLogin()
{
$form=new LoginForm;
if(isset($_POST['LoginForm']))
{
// collects user input data
$form->attributes=$_POST['LoginForm'];
// valideaza input-urile si se face redirect spre pagina anterioara,
// daca are succes validarea
if($form->validate())
$this->redirect(Yii::app()->user->returnUrl);
}
// afiseaza formularul de logare
$this->render('login',array('user'=>$form));
}
In codul de mai sus, mai intai cream o instanta LoginForm
; daca cererea este
o cerere POST (adica s-a apasat butonul de submit), populam $form
cu datele primite aflate in $_POST['LoginForm']
; apoi putem valida input-urile
si daca sunt valide, atunci se face redirectarea utilizatorului catre pagina care
a cerut autentificarea. Daca validarea esueaza, sau daca action-ul este accesat prima data,
atunci generam view-ul login
al carui continut va fi descris in urmatoarea sub-sectiune.
Sfat: In action-ul
login
, folosimYii::app()->user->returnUrl
pentru a afla URL-ul paginii care a avut nevoie anterior de autentificare. ComponentaYii::app()->user
este de tip CWebUser (sau de timpul unei clase derivate din aceasta) care contine informatiile despre utilizator (ex. username, status). Pentru mai mult detalii, trebuie vazuta sectiunea Autentificare si autorizare.
Trebuie sa acordam o atentie speciala urmatoarei instructiuni PHP care apare in action-ul login
:
$form->attributes=$_POST['LoginForm'];
Dupa cum am explicat in Securizarea asignarilor de atribute,
aceasta linie de cod populeaza modelul cu datele trimise de catre utilizator.
Proprietatea attributes
este definita de catre CModel, care asteapta
un array de perechi nume-valoare si care asigneaza fiecare valoare la
atributul corespunzator al modelului. Deci, daca $_POST['LoginForm']
ne da
un astfel de array, presupunand ca fiecare atribut necesar este in acest array,
codul de mai sus ar fi echivalent cu urmatorul cod (care poate fi foarte lung daca sunt multe atribute):
$form->username=$_POST['LoginForm']['username'];
$form->password=$_POST['LoginForm']['password'];
$form->rememberMe=$_POST['LoginForm']['rememberMe'];
Nota: Pentru a permite
$_POST['LoginForm']
sa ne dea un array in loc de un string, aderam la o conventie atunci cand denumim campurile input din view. In particular, pentru un camp input care corespunde cu atributula1
din clasa modeluluiC
, vom numi acest inputC[a1]
. De exemplu, vom folosiLoginForm[username]
pentru a numi campul input corespunzator cu atributulusername
.
Ce mai ramane de facut este sa cream view-ul login
care ar trebui sa contina un
formular HTML care sa contina campurile input necesare.
Signup or Login in order to comment.