2010-10-27 63 views
3

我已经使用Yii::app()->user->returnUrl但它总是将我重定向到localhost/index.php。是否有任何特定的配置或代码段,我必须写其他程序?如果您有其他解决方案,请让我知道。Yii框架中错误的返回url

回答

0

我想,你必须将其设置:

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

但我不清楚用户正在访问的当前网址。 – aslingga 2010-10-27 08:49:47

3

@aslingga,可以请你解释一下你想用RETURNURL做什么?你只是试图回到你登录后的位置,或者你是否在别的地方使用它?

这是从Yii documentation

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

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

我建议排除故障的一种方法是做一个print_r($_SESSION);只是为了确保ret​​urnUrl实际上被存储。然后,你将能够检查index.php是否被存储为returnUrl,或者你是否因为某种原因被重定向。

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

+0

我想将我的语言从默认EN_US更改为ID_ID。像这样url => http://www.domain.com/language/change/to/id_id。所以在我改变我的语言之后,它会重定向到我的最后一页。你有另一种解决方案吗?让我知道它。 – aslingga 2010-10-27 08:47:47

+0

@aslingga,回复您对@addfs的评论。您可以通过CHttpRequest类方法之一获取用户所在的页面。 http://www.yiiframework.com/doc/api/1.1/CHttpRequest#url-detail。哪些是php $ _SERVER变量的包装器。 – 2010-10-27 17:25:02

3

我知道这个问题很老,但也许这会帮助别人,因为我没有找到一个体面的答案任何地方。

getReturnUrl如何工作

配置您的Yii应用程序默认返回URL需要一点点的定制。它开箱的方式是,你每次调用时指定的默认返回URL:

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

的想法是,如果用户访问需要身份验证的网页时,他们会重定向到登录页面,但没有运行

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

现在,当用户登录时,他们将回到他们打算去的网页的网站之前。

虽然我喜欢该功能,但每次都必须设置默认返回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功能的能力。