mirror of
https://github.com/yiisoft/yii.git
synced 2026-03-12 11:06:54 +01:00
58 lines
4.5 KiB
Plaintext
58 lines
4.5 KiB
Plaintext
Створення дії
|
||
=============
|
||
|
||
Коли готова модель, можна приступати до написання коду для роботи з нею.
|
||
Всю логіку обробки ми поміщаємо в дії контролера.
|
||
Для форми авторизації, наприклад, нам буде потрібно наступний код:
|
||
|
||
~~~
|
||
[php]
|
||
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`, яке розглянемо в наступному розділі.
|
||
|
||
> Tip|Підказка: У дії `login` ми використовуємо `Yii::app()->user->returnUrl`, щоб отримати URL сторінки, яка вимагала авторизацію. Компонент `Yii::app()->user` є підкласом [CWebUser], який дозволяє отримати інформацію, що зберігається у сесії користувача (наприклад імʼя користувача, статус та ін.) Детально ознайомитися з темою можна в розділі [Аутентифікація і авторизація](/doc/guide/topics.auth).
|
||
|
||
Звернемо особливу увагу на такий вираз у дії `login`:
|
||
|
||
~~~
|
||
[php]
|
||
$model->attributes=$_POST['LoginForm'];
|
||
~~~
|
||
|
||
Як ми вже говорили в підрозділі [Безпечне присвоювання значень атрибутів](/doc/guide/form.model#securing-attribute-assignments), цей вираз заповнює модель даними, які вводить користувач. Властивість `attributes` визначається класом [CModel], який очікує отримати масив пар імʼя-значення, щоб потім привласнити кожному атрибуту моделі відповідне значення. Отже, якщо `$_POST['LoginForm']` містить такий масив, то вираз, який ми навели вище, буде еквівалентно наступному коду (вважаємо, що масив містить всі потрібні нам атрибути):
|
||
|
||
~~~
|
||
[php]
|
||
$model->username=$_POST['LoginForm']['username'];
|
||
$model->password=$_POST['LoginForm']['password'];
|
||
$model->rememberMe=$_POST['LoginForm']['rememberMe'];
|
||
~~~
|
||
|
||
> Note|Примітка: Для того, щоб `$_POST['LoginForm']` повернув нам масив замість рядка,
|
||
потрібно слідувати правилам іменування полів введення в представленні. Так поле, відповідне атрибуту `a`
|
||
в класі моделі `C`, має називатися `C[a]`. У нашому прикладі для назви поля,
|
||
відповідного атрибуту `username`, ми будемо використовувати імʼя `LoginForm[username]`.
|
||
|
||
Тепер нам залишилося тільки створити представлення `login`, яке буде містити HTML форму з необхідними полями.
|
||
|
||
<div class="revision">$Id: form.action.txt 1837 2010-02-24 22:49:51Z qiang.xue $</div> |