Heim >Backend-Entwicklung >PHP-Tutorial >Yii框架中LoginForm中login方法这段代码如何理解呢?

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

WBOY
WBOYOriginal
2016-06-06 20:45:421294Durchsuche

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

<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 面向对象、所以都封装好了

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn