№18 Dars — Yiida action hosil qilish va u bilan ishlash
Model tayyor endi biz u bilan ishlash uchun kod yozishga kirishishimiz mumkin. Barcha mantiqiy jarayonlarni kontroller actioniga joylashtiramiz. Ro`yxatdan o`tadigan forma uchun kod talab qilinadi. Misol uchun:
public function actionLogin() { $model=new LoginForm; if(isset($_POST['LoginForm'])) { // foydalanuvchi tomonida kelayotgan ma`lumotlarni olamiz. $model->attributes=$_POST['LoginForm']; // olingan ma`lumotni tekshiramiz, agar true bo`lsa oldingi pagega foydalanuvchini yo`naltiradi. if($model->validate()) $this->redirect(Yii::app()->user->returnUrl); } // login viewsiga render qilish $this->render('login',array('model'=>$model)); }
LoginForm modeli nusxasini hosil qilamiz, keyin agar formadagi ma`lumotlar jo`natilgan bo`lsa, $modelni $_POST[‘LoginForm’] ma`lumotlari bilan to`ldiramiz.
Keyin olingan ma`lumotni tekshiramiz va agar xato yo`q bo`lsa, foydalanuvchi pagega jo`natamiz, agar xato bo`lsa, ro`yxatdan o`tish pagega qayta yo`naltiramiz, ya`ni login viewsiga.
Eslatma: Ro`yxatdan o`tish talab qilinganda login actionida Yii::app()->user->returnUrl pagening URL ini olish uchun ishlatamiz. Yii::app()->user CWebUser class obyektining komponenti bo`lib, ma`lumotlarni olish uchun ishlatiladi, foydalanuvchining ma`lumotlarini sessiyasida saqlidi.(Misol uchun foydalanuvchining nomi shu kabilar). Bu mavzu haqida batafsil tanishmoqchi bo`lsangiz Аутентификация и авторизация bo`limini ko`rib chiqishni maslahat beramiz.
Login actionidagi quyidagi holatiga diqqat qiling.
$model->attributes=$_POST[‘LoginForm’];
Foydalanuvchi tomonidan kiritilayotgan ma`lumotlarni modelga berish bo`lib, bu mavzuda
Attribut belgilarini xavfsiz o`zlashtirish bo`limida gaplashib o`tgan edik.
Har bir modelning attributiga mos ma`lumotlar massiv ko`rinishida o`zlashtiriladi.
Demak agar $_POST[‘LoginForm’] massiv ko`rinishida saqlasak, bu ekvivalent bo`ladi quyidagi holatga:
$model->username=$_POST['LoginForm']['username']; $model->password=$_POST['LoginForm']['password']; $model->rememberMe=$_POST['LoginForm']['rememberMe'];
Izoh: Viewdagi kiritilayotgan maydonlar nomlarini to`g`ri ko`satish kerak. $_POST[‘LoginForm’] satr o`rniga massiv qaytaradi.C[a] ning aytilishi C modelga mos a attribut maydoni. Bizning misolda «username» attributining LoginForm[username] ko`rinishda foydalanishimiz mumkin.Endi bizda faqat login viewidagi talab qilingan maydonlarni HTML kodi orqali hosil qilish kerak.
Manba:
Web Dasturlash
№18 Dars — Yiida action hosil qilish va u bilan ishlash