Начал изучать этот фраймворк. Создал типовый проект. И никак не могу понять куда уходят даные с формы при регистарции, как с этим всем связан компонент UserIndenty. Объясните пожалуйста, если кто может.
Начал изучать этот фраймворк. Создал типовый проект. И никак не могу понять куда уходят даные с формы при регистарции, как с этим всем связан компонент UserIndenty. Объясните пожалуйста, если кто может.
Вы, наверное, имели в виду при аутентификации? (стандартный проект регистрацию не предусматривает).
При заполнении полей формы и нажатии кнопки submit данные post запросом отправляются по текущему адресу (index.php?r=site/login).
Смотрим контроллер SiteController и actionLogin:
public function actionLogin()
{
$model=new LoginForm;
// if it is ajax validation request
if(isset($_POST['ajax']) && $_POST['ajax']==='login-form')
{
echo CActiveForm::validate($model);
Yii::app()->end();
}
// collect user input data
if(isset($_POST['LoginForm']))
{
$model->attributes=$_POST['LoginForm'];
// validate user input and redirect to the previous page if valid
if($model->validate() && $model->login())
$this->redirect(Yii::app()->user->returnUrl);
}
// display the login form
$this->render('login',array('model'=>$model));
}
С формой связана модель LoginForm, которая имеет атрибуты username, password и rememberMe. Ключевым валидатором в разделе rules() является array(‘password’, ‘authenticate’). Он не является стандартным, и его код располагается в том же классе LoginForm (метод authenticate).
Ключевым моментом этого метода является создание объекта класса UserIdentity с параметрами username и password. Этот класс наследует класс CUserIdentity, который служит для идентификации пользователя, но не содержит в себе реализации метода authenticate(). Это нам нужно сделать самим в зависимости от задачи и желаемого метода аутентификации. Обычно в этом методе должно быть обращение к базе данных и проверка переданных имени и пароля, но стандартная реализация, сгенерированная утилитой yiic, просто ищет пользователей в заранее определенном в том же методе массиве $users, а затем возвращает тот или иной код ошибки (или код self::ERROR_NONE, если аутентификация прошла успешно).
Итак, всё вышеописанное происходит в методе $model->validate(). Для успешного входа остается только выполнить условие $model->login(). К счастью, оно гораздо проще Несмотря на то, что там вставлены различные if’ы, в нашем случае (т.к. валидацию форма прошла) сразу исполнится строка
Yii::app()->user->login($this->_identity,$duration);
Метод login класса CWebUser сохраняет некоторую информацию о пользователе в сессии в течение периода $duration, используя данные созданного выше объекта UserIdentity. Сохраняет он, естественно, только самые необходимые данные (например, id пользователя, который по умолчанию равен username), но можно сохранить и больше информации, используя при аутентификации метод setState.
Ну и наконец завершающий редирект туда, куда хотел попасть юзер, но был автоматически перенаправлен на страницу login:
$this->redirect(Yii::app()->user->returnUrl);
спасибо за ответ