我使用了 Yii::app()->user->returnUrl
但是它总是将我重定向到 localhost/index.php
。是否有特定的配置或必须编写其他程序代码的代码片段?如果您有其他解决方案,请告诉我。
@aslingga,请问你使用returnUrl是为了什么?你只是想在登录后回到之前的页面吗,还是在其他地方使用它?
这是来自Yii文档的内容:
将用户浏览器重定向到登录页面。在重定向之前,当前URL(如果不是AJAX URL)将被保存在returnUrl中,以便用户浏览器在成功登录后可以重定向回当前页面。确保设置loginUrl,以便在调用此方法后,用户浏览器可以重定向到指定的登录URL。调用此方法后,当前请求处理将被终止。
换句话说,如果您尝试请求的页面需要身份验证,则会将您所在页面的URI存储在会话变量中。然后,一旦您登录,它会带您返回到该页面。
我建议您进行一些故障排除,其中之一是执行print_r($_SESSION);
以确保 returnUrl 实际上已被存储。然后,您就可以检查 index.php 是否作为 returnUrl 被存储,或者您只是因某种原因被重定向到那里。我知道这个问题已经很久了,但也许我的回答可以帮助到一些人,因为我在任何地方都没有找到一个像样的答案。
为您的Yii应用程序设置默认的返回URL需要进行一些自定义。它的工作方式是,在每次调用时指定默认的返回URL:
Yii::app()->user->getReturnUrl('site/internal');
这个想法是,如果用户访问需要认证的页面,他们将被重定向到登录页面,但在运行网站之前不会显示此页面
Yii::app()->user->setReturnUrl('site/visitedpage');
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功能的能力。
我认为,你必须设置它:
Yii::app()->user->setReturnUrl('controller/action');