Yii框架中的错误返回URL

3

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

3个回答

3

@aslingga,请问你使用returnUrl是为了什么?你只是想在登录后回到之前的页面吗,还是在其他地方使用它?

这是来自Yii文档的内容:

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

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

我建议您进行一些故障排除,其中之一是执行 print_r($_SESSION); 以确保 returnUrl 实际上已被存储。然后,您就可以检查 index.php 是否作为 returnUrl 被存储,或者您只是因某种原因被重定向到那里。
查看 CWebUser 方法 getState 和 setState 也可能会有所帮助。

我想将我的语言从默认的EN_US更改为ID_ID。就像这个URL => http://www.domain.com/language/change/to/id_id。所以在我更改语言后,它会重定向到我的上一个页面。你有其他解决方案吗?请告诉我。 - aslingga
@aslingga,回应你在@addfs的帖子中的评论。你可以通过CHttpRequest类的其中一个方法获取用户所在的页面。http://www.yiiframework.com/doc/api/1.1/CHttpRequest#url-detail。这些方法是php $_SERVER变量的包装器。 - Philip Walton

3

我知道这个问题已经很久了,但也许我的回答可以帮助到一些人,因为我在任何地方都没有找到一个像样的答案。

getReturnUrl的工作原理

为您的Yii应用程序设置默认的返回URL需要进行一些自定义。它的工作方式是,在每次调用时指定默认的返回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'或者只是'/'。在某些情况下这样做是可以的,但并非总是如此。我认为这个解决方案更好。

首先,扩展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功能的能力。


0

我认为,你必须设置它:

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

但我不清楚用户正在访问的当前URL。 - aslingga

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接