0 follower

Створення дії

Коли готова модель, можна приступати до написання коду для роботи з нею. Всю логіку обробки ми поміщаємо в дії контролера. Для форми авторизації, наприклад, нам буде потрібно наступний код:

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 форму з необхідними полями.

Found a typo or you think this page needs improvement?
Edit it on github !