如何在Yii中设置returnUrl值


How to set returnUrl value in Yii

我正在使用Yii,而我遇到的问题是Yii::app()->user->returnUrl。它总是将我返回到index.php页面。

我如何将其值设置为请求当前页面的页面,因为我不知道用户访问了当前页面的哪个页面?

您可以使用Yii::app()->request->urlReferrer查看用户的来源。

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

请注意,如果用户来自第三方网站,那么这将重定向他们离开您的网站。

对于使用Yii2 的用户

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

没有这样的东西:Yii::app()->user->urlReferrer

应为:Yii::app()->request->urlReferrerYii::app()->request->requestUri (current page)

所以试试这个:

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

或者这个(我个人更喜欢):

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

我创建了一个Yii扩展来管理返回URL,您可以在这里找到它:https://github.com/cornernote/yii-return-url#yii-returnurl

这是对Yii处理它的方式的改进,因为它将返回url存储在GET/POST数据中,而不是SESSION中。这意味着,如果您打开了多个选项卡,那么每个选项卡都可以有自己的返回url。

您可以像这样使用

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

希望这将帮助您

你也可以这样做

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

对于那些仍在努力返回上一页的人:您必须在登录模型$referer中创建一个属性,在初始化Login模型时,您将此属性设置为Yii::$app->request->referrer。你必须这样做,因为在你提交表格后,你的推荐人确实会更改到当前页面,而且由于它是null,它会让你返回索引操作。因此,传递返回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));
    }
}

查看login.php:

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