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

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Аватара пользователя
Tash
Сообщения: 26
Зарегистрирован: 2014.02.25, 19:06

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

Сообщение 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']); // можно использовать вот такой вариант, но мне он кажется странным, хотелось бы единообразия в методах
    } 
В общем что-то меня во всей этой реализации смущает. Подскажите как правильно запоминать предыдущую страницу и редиректить на неё?
Аватара пользователя
flashimage
Сообщения: 1517
Зарегистрирован: 2011.01.23, 12:43

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

Сообщение flashimage »

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

public function actionLogout() {
$returnUrl = Yii::app()->user->returnUrl;
    Yii::app()->user->logout();
    $this->redirect($returnUrl); 
    } 
Бранчи это гомеоморфические эндофункторы, которые мапятся на субманифолды пространства Гилберта.
Аватара пользователя
Tash
Сообщения: 26
Зарегистрирован: 2014.02.25, 19:06

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

Сообщение Tash »

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

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

Сообщение IvanChe »

Да, смотреть CWebUser. Метод logout() либо удаляет полностью сессию, либо просто очищает все её данные.
Аватара пользователя
Tash
Сообщения: 26
Зарегистрирован: 2014.02.25, 19:06

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

Сообщение Tash »

IvanChe, спасибо за пояснения.
die1990
Сообщения: 15
Зарегистрирован: 2021.12.21, 20:18

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

Сообщение 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);
Ответить