yii中设置返回上一页的地址returnUrl



2013-03-23 14:04:32|  分类: yii之全局调用 |字号 订阅

  yii中设置返回操作前的地址:

一、利用yii中的setReturnUrl和getReturnUrl方法

yii中如果需要重定向跳转前的地址,可以利用CwebUser中的setReturnUrl()先方法设置,然后跳转后再用getReturnUrl()获得设置的这个地址,跳回去,不会自动跳转。
public function setReturnUrl($value)
{
    $this->setState('__returnUrl',$value);
}

//返回用户成功登陆后应该跳转的URL。这个属性常用于登陆动作。如果成功登陆,将读取这个属性,然后用它来重定向用户的浏览器。
//$defaultUrl默认的要返回的URL,如果之前没有设置的话。如果是null,应用入口的URL将被作为默认返回的URL。
public function getReturnUrl($defaultUrl=null)
{
    return $this->getState('__returnUrl', $defaultUrl===null ? Yii::app()->getRequest()->getScriptUrl() : CHtml::normalizeUrl($defaultUrl));
}

getScriptUrl():返回入口文件的Url


以CWebUser中的loginRequired方法为例:
public function loginRequired()
{
    $app=Yii::app();
    $request=$app->getRequest();

    if(!$request->getIsAjaxRequest())
        $this->setReturnUrl($request->getUrl());  //先设置返回的地址
    elseif(isset($this->loginRequiredAjaxResponse))
    {
        echo $this->loginRequiredAjaxResponse;
        Yii::app()->end();
    }

    if(($url=$this->loginUrl)!==null)
    {
        if(is_array($url))
        {
            $route=isset($url[0]) ? $url[0] : $app->defaultController;
            $url=$app->createUrl($route,array_splice($url,1));
        }
        $request->redirect($url);
    }
    else
        throw new CHttpException(403,Yii::t('yii','Login Required'));
}

重定向用户浏览器到登陆页面。重定向之前,当前的URL(如果不是一个AJAX url)将被保存在 returnUrl中,以便用户的浏览器可能会被重定向去到成功登录后的页面。确保你设置了loginUrl 使用户调用此方法后可以被重定向到指定的登录地址调用此方法后,将终止当前的语录处理。


二、利用传统方法在网址后传入一个reffer参数记录下跳转前的地址

原文地址:https://www.cnblogs.com/ldms/p/3045491.html