【发布时间】:2013-11-30 10:46:39
【问题描述】:
我正在使用 Yii,我遇到的问题是 Yii::app()->user->returnUrl。它总是让我回到index.php 页面。
我不知道用户从哪个页面访问了当前页面,如何将其值设置为请求当前页面的页面?
【问题讨论】:
我正在使用 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();
}
请注意,如果用户来自第 3 方网站,那么这会将他们重定向到您的网站之外。
【讨论】:
对于那些使用 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);
希望对你有帮助
【讨论】:
CHttpRequest 中读取getUrlReferrer,它将是……空的?您绝对应该使用应用程序对象 (Yii::app()->request->urlReferrer) 提供的对象,而不是创建新对象。但是......也许我没有得到全貌,我错了......
你也可以这样做
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) ?>
【讨论】: