首页 > Yii框架中LoginForm中login方法这段代码如何理解呢?

Yii框架中LoginForm中login方法这段代码如何理解呢?

代码如下,就是生成的这段代码:

public function login()
{
    if($this->_identity===null)
    {
        $this->_identity=new UserIdentity($this->username,$this->password);
        $this->_identity->authenticate();
    }
    if($this->_identity->errorCode===UserIdentity::ERROR_NONE)
    {
        $duration=$this->rememberMe ? 3600*24*30 : 0; // 30 days
        Yii::app()->user->login($this->_identity,$duration);
        return true;
    }
    else{

        return false;
    }

    }

}

其中这里让我费解:
Yii::app()->user->login($this->_identity,$duration);

user这个属性我追查不到源码啊!
就说明user不是app()函数得到的那个成员变量。
而且我追查app函数源码:
$_app这个变量哪个函数的实例?
public static function app()
{
return self::$_app;
}


Yii::app()就是实例化CWebApplication这个类是知道的吧。

public static function setApplication($app)
{
    if(self::$_app===null || $app===null)
        self::$_app=$app;
    else
        throw new CException(Yii::t('yii','Yii application can only be created once.'));
}

在入口文件第一次实例化的时候将$_app赋值过了

根据YiiBase类里的$_coreClasses 可以知道去/web/CWebApplication.php里的

protected function registerCoreComponents()
{
    parent::registerCoreComponents();

    $components=array(
        'session'=>array(
            'class'=>'CHttpSession',
        ),
        'assetManager'=>array(
            'class'=>'CAssetManager',
        ),
        'user'=>array(
            'class'=>'CWebUser',
        ),
        'themeManager'=>array(
            'class'=>'CThemeManager',
        ),
        'authManager'=>array(
            'class'=>'CPhpAuthManager',
        ),
        'clientScript'=>array(
            'class'=>'CClientScript',
        ),
        'widgetFactory'=>array(
            'class'=>'CWidgetFactory',
        ),
    );

    $this->setComponents($components);
}

知道Yii::app()->user其实实例化的是CWebUser类
然后Yii::app()->user->login($this->_identity,$duration)
其实就是调用CWebUser类里面的login方法。
继续在YiiBase里的$_coreClasses里跟到CWebUser类在/web/auth/CWebUser.php。
Yii 1.1.14版本是在CWebUser.php的227行


Yii::app()->user

其实已经自动引入了 framework\web\auth\CWebUser.php 这个文件,login 是这个类的一个方法

你可以仔细阅读下,就能明白了。其实就是一个session和cookie的操作过程。Yii 面向对象、所以都封装好了


在auto load 已经加载了user ,建议你看看 Yii的程序结构和大概的执行流程

【热门文章】
【热门文章】