代码如下,就是生成的这段代码:
<code>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; } } </code>
}
其中这里让我费解:Yii::app()->user->login($this->_identity,$duration);
user这个属性我追查不到源码啊!
就说明user不是app()函数得到的那个成员变量。
而且我追查app函数源码:
$_app这个变量哪个函数的实例?
public static function app()
{
return self::$_app;
}
代码如下,就是生成的这段代码:
<code>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; } } </code>
}
其中这里让我费解:Yii::app()->user->login($this->_identity,$duration);
user这个属性我追查不到源码啊!
就说明user不是app()函数得到的那个成员变量。
而且我追查app函数源码:
$_app这个变量哪个函数的实例?
public static function app()
{
return self::$_app;
}
Yii::app()就是实例化CWebApplication这个类是知道的吧。
<code>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.')); } </code>
在入口文件第一次实例化的时候将$_app赋值过了
根据YiiBase类里的$_coreClasses 可以知道去/web/CWebApplication.php里的
<code>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); } </code>
知道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行
在auto load 已经加载了user ,建议你看看 Yii的程序结构和大概的执行流程
<code>Yii::app()->user </code>
其实已经自动引入了 framework\web\auth\CWebUser.php 这个文件,login 是这个类的一个方法
你可以仔细阅读下,就能明白了。其实就是一个session和cookie的操作过程。Yii 面向对象、所以都封装好了