我正在使用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->urlReferrer
或Yii::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) ?>