如何在Yii中设置returnUrl值

m2xkgtsf  于 2022-11-09  发布在  其他
关注(0)|答案(7)|浏览(167)

我正在使用Yii,我遇到的问题是Yii::app()->user->returnUrl。它总是让我返回到index.php页面。
我如何将其值设置为请求当前页面的页面,因为我不知道用户是从哪个页面访问当前页面的?

t1qtbnec

t1qtbnec1#

您可以使用Yii::app()->request->urlReferrer来查看用户来自何处。

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

请注意,如果用户来自第三方站点,则此操作会将他们从您的站点重定向出去。

ru9i0ody

ru9i0ody2#

对于使用Yii2的用户

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

bmp9r5qi3#

世上没有这样的事: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;
rwqw0loc

rwqw0loc4#

我创建了一个Yii扩展来管理返回URL,你可以在这里找到它:https://github.com/cornernote/yii-return-url#yii-returnurl
这比Yii的处理方式有所改进,因为它将返回url存储在GET/POST数据中而不是SESSION中。这意味着如果你打开了多个标签页,那么每个标签页都可以有自己的返回url。

sg3maiej

sg3maiej5#

你可以这样使用

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

希望这对你有帮助

8dtrkrch

8dtrkrch6#

你也可以这样做

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

hts6caw37#

对于那些还在努力返回上一页的人:您必须在登录模型$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));
    }
}

查看登录信息

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

相关问题