How to set returnUrl value in Yii

左心房为你撑大大i 提交于 2019-12-06 05:37:16

问题


I am using Yii and the problem I am getting is with the Yii::app()->user->returnUrl. It always returns me to the index.php page.

How can I set its value to the page which requested the current page as I do not know from which page user has visited the current page?


回答1:


You can use Yii::app()->request->urlReferrer to see where the user came from.

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

Be careful, if the user came from a 3rd party site, then this will redirect them away from your site.




回答2:


There is no such thing as: Yii::app()->user->urlReferrer

It should be: Yii::app()->request->urlReferrer or Yii::app()->request->requestUri (current page)

So try this:

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

Or this one (which I personally prefer):

Yii::app()->user->returnUrl = Yii::app()->request->requestUri;



回答3:


For those using Yii2

Yii::$app->user->returnUrl = Yii::$app->request->referrer;



回答4:


I created a Yii extension to manage return URLs, you can find it here: https://github.com/cornernote/yii-return-url#yii-returnurl

It's an improvement over the way Yii handles it because it stores the return url in the GET/POST data instead of the SESSION. This means that if you have multiple tabs open then each can have it's own return url.




回答5:


You can use like this

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

Hope this will help you




回答6:


You can also do like that

Yii::app()->user->returnUrl = Yii::app()->request->urlReferrer;
$this->redirect(Yii::app()->user->returnUrl);



回答7:


For those who still struggling with returning to previous page: You have to create a property in login model $referer, and at the time when you initialize your Login model you set this property to Yii::$app->request->referrer. You have to go this way because after you submit your form your referrer does change to current page, and since it is null, it return you to index action. So the way how to pass the return URL is to store it in the hidden field at the form, so when you submit the form you have this URL loaded and you can perform action to return $this->goBack($form->referer ? $form->referer : null). Here is the code:

Login model:

public $referer;

Controller action:

$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));
    }
}

View login.php:

<?= $form->field($model, 'referer')->hiddenInput()->label(false) ?>


来源:https://stackoverflow.com/questions/20299295/how-to-set-returnurl-value-in-yii

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!