Страница 1 из 1

Редирект на предыдущую страницу

Добавлено: 2014.03.09, 14:47
Tash
Не получается переадресовывать после выхода на предыдущую страницу, имеем:

localhost\www\test\protected\views\layouts\main.php

Код: Выделить всё

    echo CHtml::link(UserModule::t("Login"), '#', array('onclick'=>'$("#userLogin_dialog").dialog("open"); return false;',)); // ссылка на вход
    echo CHtml::link(UserModule::t("Logout").' ('.Yii::app()->user->name.')', Yii::app()->getModule('user')->logoutUrl); // ссылка на выход
    Yii::app()->user->setState('returnUrl', Yii::app()->request->url); //запоминаю текущую страницу 
    $this->beginWidget('zii.widgets.jui.CJuiDialog', array(
            'id' => 'userLogin_dialog',
            'options' => array(
                'title' => UserModule::t("Login"),
                'autoOpen' => false,
                'modal' => true,),)); 
        $model=new UserLogin; 
        $form=$this->beginWidget('CActiveForm', array(
            'enableClientValidation'=>true,
            'action'=>array('user/login'),));
            echo $this->renderPartial('application.modules.user.views.user.login', array('model' => $model));
        $this->endWidget();
    $this->endWidget('zii.widgets.jui.CJuiDialog'); 
localhost\www\test\protected\modules\user\controllers\LoginController.php

Код: Выделить всё

public function actionLogin() {
    // проверка валидности если все ок: 
    $this->redirect(Yii::app()->user->returnUrl); // редирект который работает
    } 
localhost\www\test\protected\modules\user\controllers\LogoutController.php

Код: Выделить всё

public function actionLogout() {
    Yii::app()->user->logout();
    $this->redirect(Yii::app()->user->returnUrl); // здесь редирект уже не работает, возвращает всегда в корень
    //$this->redirect($_SERVER['HTTP_REFERER']); // можно использовать вот такой вариант, но мне он кажется странным, хотелось бы единообразия в методах
    } 
В общем что-то меня во всей этой реализации смущает. Подскажите как правильно запоминать предыдущую страницу и редиректить на неё?

Re: Редирект на предыдущую страницу

Добавлено: 2014.03.09, 16:22
flashimage

Код: Выделить всё

public function actionLogout() {
$returnUrl = Yii::app()->user->returnUrl;
    Yii::app()->user->logout();
    $this->redirect($returnUrl); 
    } 

Re: Редирект на предыдущую страницу

Добавлено: 2014.03.10, 09:21
Tash
flashimage, спасибо огромное, всё работает. Но всё же для меня всё это не очевидно. Что такого происходит в logout()? Уничтожаются все переменные сессии?
Смотреть в этот класс: localhost\www\yii\framework\web\auth\CWebUser.php?
Простите если вопросы дурацкие, я пишу первый свой сайт.

Re: Редирект на предыдущую страницу

Добавлено: 2014.03.10, 11:59
IvanChe
Да, смотреть CWebUser. Метод logout() либо удаляет полностью сессию, либо просто очищает все её данные.

Re: Редирект на предыдущую страницу

Добавлено: 2014.03.10, 16:13
Tash
IvanChe, спасибо за пояснения.

Re: Редирект на предыдущую страницу

Добавлено: 2021.12.25, 11:45
die1990
flashimage писал(а): 2014.03.09, 16:22

Код: Выделить всё

public function actionLogout() {
$returnUrl = Yii::app()->user->returnUrl;
    Yii::app()->user->logout();
    $this->redirect($returnUrl); 
    } 
ты бы хоть подсказывал без ошибок $this->redirect(Yii::$app->user->returnUrl);