Yii框架中的错误返回URL

时间:2010-10-27 05:18:22

标签: php url yii

我使用了Yii::app()->user->returnUrl,但它始终将我重定向到localhost/index.php。是否有任何特定的配置或一些代码,我必须编写其他程序?如果您有其他解决方案,请告诉我。

3 个答案:

答案 0 :(得分:3)

@aslingga,你能解释一下你想用returnUrl做什么吗?你只是想回到登录后的位置,还是在其他地方使用它?

这来自Yii documentation

  

将用户浏览器重定向到   登录页面。在重定向之前,   当前的URL(如果它不是AJAX   url)将保存在returnUrl中   可以重定向用户浏览器   之后回到当前页面   成功登录。确保你设置   loginUrl以便用户浏览器可以   被重定向到指定的登录   调用此方法后的URL。后   调用这个方法,当前   请求处理将被终止。

换句话说,如果您尝试请求的页面需要身份验证,则您所在页面的URI将存储在会话变量中。然后,一旦您登录,它将带您返回该页面。

我建议进行故障排除的一种方法是执行print_r($_SESSION);只是为了确保实际存储了returnUrl。然后,您将能够检查index.php是否存储为returnUrl,或者您是否因某种原因被重定向到那里。

查看CWebUser方法getState和setState可能也会有所帮助。

答案 1 :(得分:3)

我知道这个问题很老但也许这会帮助别人,因为我无法在任何地方找到合适的答案。

getReturnUrl如何工作

为Yii应用设置默认返回网址需要进行一些自定义。开箱即用的方式是每次调用它时都指定默认的返回URL:

Yii::app()->user->getReturnUrl('site/internal');

这个想法是,如果用户要访问需要身份验证的页面,他们将被重定向到登录页面,但不会在网站运行之前

Yii::app()->user->setReturnUrl('site/visitedpage');

现在,当用户登录时,他们将返回到他们打算去的页面。

虽然我喜欢这个功能,但每次都必须设置默认的返回URL是愚蠢的。如果要更改默认返回URL,则必须在整个代码中找到它。我想你可以在站点参数中设置值并调用

Yii::app()->user->getReturnUrl(Yii::app()->params['defaultReturnUrl']);

我认为我不必解释为什么这个解决方案也很烦人。

我的解决方案

因此,当没有任何参数调用 getReturnUrl 时,它会返回'/index.php'或只返回'/'。在某些情况下这很好,但并非总是如此。这是更好的IMO。

首先,扩展 CWebUser 类并添加以下附加内容

class WebUser extends CWebUser {
    // default return URL property
    public defaultReturnUrl;

    // override the getReturnUrl method
    public function getReturnUrl($defaultUrl=NULL) {
        if ($defaultUrl === NULL) {
            $defaultReturnUrl = $this->defaultReturnUrl;
        }
        else {
            $defaultReturnUrl = CHtml::normalizeUrl($defaultUrl);
        }
        return $this->getState('__returnUrl',$defaultReturnUrl);
    }
}

现在,让我们在用户组件数组中添加几个项目。

'user' => array(
    'class' => 'WebUser',
    'defaultReturnUrl' => 'site/internal'
)

这不仅允许您在配置中设置默认返回URL,还可以设置不同的默认返回URL并使用setReturnUrl功能。

答案 2 :(得分:0)

我想,你必须设置它:

Yii::app()->user->setReturnUrl('controller/action');