【问题标题】:How to set returnUrl value in YiiYii中如何设置returnUrl值
【发布时间】:2013-11-30 10:46:39
【问题描述】:

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

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

【问题讨论】:

    标签: php yii returnurl


    【解决方案1】:

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

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

    请注意,如果用户来自第 3 方网站,那么这会将他们重定向到您的网站之外。

    【讨论】:

    • 感谢朋友...也感谢您警告我这件事 :) 干杯
    • 这里有一个错字:Yii::app()->**user**->urlReferrer 应该是 Yii::app()->**request**->urlReferrer。
    【解决方案2】:

    对于那些使用 Yii2 的人

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

    【讨论】:

      【解决方案3】:

      没有这样的东西: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;
      

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

          你可以这样使用

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

          希望对你有帮助

          【讨论】:

          • 是我遗漏了什么,还是你错了?如果您从新创建的 CHttpRequest 中读取getUrlReferrer,它将是……空的?您绝对应该使用应用程序对象 (Yii::app()->request->urlReferrer) 提供的对象,而不是创建新对象。但是......也许我没有得到全貌,我错了......
          【解决方案6】:

          你也可以这样做

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

          【讨论】:

            【解决方案7】:

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

            【讨论】:

              猜你喜欢
              • 2012-03-27
              • 2014-08-19
              • 1970-01-01
              • 1970-01-01
              • 2012-08-19
              • 2016-10-22
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多