Как установить значение returnUrl в Yii

Я использую Yii, и проблема, с которой я сталкиваюсь, связана с файлом Yii::app()->user->returnUrl. Он всегда возвращает меня на страницу index.php.

Как я могу установить его значение для страницы, которая запросила текущую страницу, поскольку я не знаю, с какой страницы пользователь посетил текущую страницу?


person Let me see    schedule 30.11.2013    source источник


Ответы (7)


Вы можете использовать Yii::app()->request->urlReferrer, чтобы узнать, откуда пришел пользователь.

public function beforeAction()
{
    Yii::app()->user->returnUrl = Yii::app()->request->urlReferrer;
    return parent::beforeAction();
}

Будьте осторожны, если пользователь пришел со стороннего сайта, это перенаправит его с вашего сайта.

person Keilo    schedule 30.11.2013
comment
Спасибо, друг... и спасибо, что предупредил меня об этом тоже :) ура - person Let me see; 30.11.2013
comment
Здесь опечатка: Yii::app()-›**user**-›urlReferrer должен быть Yii::app()-›**request**-›urlReferrer. - person Igor Savinkin; 09.09.2014

Для тех, кто использует Yii2

Yii::$app->user->returnUrl = Yii::$app->request->referrer;
person Jap Mul    schedule 09.02.2015

Нет такого понятия как: Yii::app()->user->urlReferrer

Должно быть: Yii::app()->request->urlReferrer или Yii::app()->request->requestUri (current page)

Итак, попробуйте следующее:

Yii::app()->user->returnUrl = Yii::app()->user->urlReferrer;

Или этот (который лично мне больше нравится):

Yii::app()->user->returnUrl = Yii::app()->request->requestUri;
person kon apaz    schedule 21.07.2014

Я создал расширение Yii для управления обратными URL-адресами, вы можете найти его здесь: https://github.com/cornernote/yii-return-url#yii-returnurl

Это улучшение по сравнению с тем, как Yii обрабатывает это, потому что он сохраняет URL-адрес возврата в данных GET/POST вместо SESSION. Это означает, что если у вас открыто несколько вкладок, каждая из них может иметь свой собственный URL-адрес возврата.

person cornernote    schedule 30.05.2015

Вы можете использовать вот так

$http = new CHttpRequest();
$referrer_url = $http->getUrlReferrer();
$this->redirect($referrer_url);

Надеюсь, что это поможет вам

person Jenno Richi Benat    schedule 30.11.2013
comment
Я что-то пропустил, или ты ошибаешься? Если вы прочитаете getUrlReferrer из свежего, только что созданного CHttpRequest, оно будет... пустым? Вам определенно следует использовать тот, который предоставляется объектом приложения (Yii::app()->request->urlReferrer), а не создавать новый. Но... может быть, я не понимаю всей картины и ошибаюсь... - person trejder; 01.07.2014

Вы также можете сделать так

Yii::app()->user->returnUrl = Yii::app()->request->urlReferrer;
$this->redirect(Yii::app()->user->returnUrl);
person Vipul Dhandhresha    schedule 22.04.2016

Для тех, кто все еще не может вернуться на предыдущую страницу: вам нужно создать свойство в модели входа $referer, и во время инициализации вашей модели Login вы установите для этого свойства значение Yii::$app->request->referrer. Вы должны пойти по этому пути, потому что после отправки формы ваш реферер действительно переходит на текущую страницу, и, поскольку это null, он возвращает вас к действию index. Таким образом, способ передачи URL-адреса возврата заключается в том, чтобы сохранить его в скрытом поле в форме, поэтому, когда вы отправляете форму, у вас загружается этот URL-адрес, и вы можете выполнить действие для возврата $this->goBack($form->referer ? $form->referer : null). Вот код:

Модель входа:

public $referer;

Действие контроллера:

$model = new Login();
$model->referer = Yii::$app->request->referrer;
...
if($model->load(Yii::$app->request->post()){
    ...
    if($model->save()){
        return $this->goBack((($model->referer) ? $model->referer : null));
    }
}

Посмотреть логин.php:

<?= $form->field($model, 'referer')->hiddenInput()->label(false) ?>
person Serghei Leonenco    schedule 05.06.2019