时间:2021-07-01 10:21:17 帮助过:6人阅读
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;
}
代码如下,就是生成的这段代码:
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行
在auto load 已经加载了user ,建议你看看 Yii的程序结构和大概的执行流程
Yii::app()->user
其实已经自动引入了 framework\web\auth\CWebUser.php 这个文件,login 是这个类的一个方法
你可以仔细阅读下,就能明白了。其实就是一个session和cookie的操作过程。Yii 面向对象、所以都封装好了