Коли готова модель, можна приступати до написання коду для роботи з нею. Всю логіку обробки ми поміщаємо в дії контролера. Для форми авторизації, наприклад, нам буде потрібно наступний код:
public function actionLogin()
{
$model=new LoginForm;
if(isset($_POST['LoginForm']))
{
// отримуємо дані від користувача
$model->attributes=$_POST['LoginForm'];
// перевіряємо отримані дані і, якщо результат перевірки позитивний,
// перенаправляємо користувача на попередню сторінку
if($model->validate())
$this->redirect(Yii::app()->user->returnUrl);
}
// рендеримо представлення
$this->render('login',array('model'=>$model));
}
Спочатку ми створюємо екземпляр моделі LoginForm
, потім, якщо дані форми були відправлені,
заповнюємо $model
даними $_POST['LoginForm']
. Потім перевіряємо отримані дані і, якщо все нормально,
перенаправляємо користувача на сторінку, для доступу до якої потрібно авторизуватися, тобто ту сторінку,
яка відправила користувача на сторінку авторизації. Якщо ж результат перевірки негативний або дія
виконується вперше, то відображаємо користувачу представлення login
, яке розглянемо в наступному розділі.
Підказка: У дії
login
ми використовуємоYii::app()->user->returnUrl
, щоб отримати URL сторінки, яка вимагала авторизацію. КомпонентYii::app()->user
є підкласом CWebUser, який дозволяє отримати інформацію, що зберігається у сесії користувача (наприклад імʼя користувача, статус та ін.). Детально ознайомитися з темою можна в розділі Аутентифікація і авторизація.
Звернемо особливу увагу на такий вираз у дії login
:
$model->attributes=$_POST['LoginForm'];
Як ми вже говорили в підрозділі Безпечне присвоювання значень атрибутів, цей вираз заповнює модель даними, які вводить користувач. Властивість attributes
визначається класом CModel, який очікує отримати масив пар імʼя-значення, щоб потім привласнити кожному атрибуту моделі відповідне значення. Отже, якщо $_POST['LoginForm']
містить такий масив, то вираз, який ми навели вище, буде еквівалентний наступному коду (вважаємо, що масив містить всі потрібні нам атрибути):
$model->username=$_POST['LoginForm']['username'];
$model->password=$_POST['LoginForm']['password'];
$model->rememberMe=$_POST['LoginForm']['rememberMe'];
Примітка: Для того, щоб
$_POST['LoginForm']
повернув нам масив замість рядка, потрібно слідувати правилам іменування полів введення в представленні. Так поле, відповідне атрибутуa
в класі моделіC
, має називатисяC[a]
. У нашому прикладі для назви поля, відповідного атрибутуusername
, ми будемо використовувати імʼяLoginForm[username]
.
Тепер нам залишилося тільки створити представлення login
, яке буде містити HTML форму з необхідними полями.