求教:yii身份验证问题 [ 新手入门 ]
class UserIdentity extends CUserIdentity
{
public function authenticate()
{
$username=strtolower($this->username);
$user=User::model()->find('LOWER(username)=?',array($username));
if($user===null)
$this->errorCode=self::ERROR_USERNAME_INVALID;
elseif(!$user->validatePassword($this->password)) $this->errorCode=self::ERROR_PASSWORD_INVALID;
else {
$this->_id=$user->id;
$this->username=$user->username;
$this->errorCode=self::ERROR_NONE;
}
return $this->errorCode;
这个是components里的UserIdentity.php里的代码,
$user=User::model()->find('LOWER(username)=?',array($username));
那么这里 else if(!$user->validatePassword($this->password))
的$user为什么能调用validatePassword个方法呢,validatePassword这个方法是User模型里的方法。
这之间有什么关联吗?具体是怎样调用的。请求高手来指教,先谢过了。
共 6 条回复
-
舰长视屏有讲解,方法是User模型里面的自定义的方法!新手先去看看舰长的视频!
http://www.yiichina.com/topic/4
视屏二 【25分】 处! -
我不习惯看视频,但是Yii的手册讲解的很全面了呀。
public CActiveRecord find(mixed $condition='', array $params=array ( )) $condition mixed query condition or criteria. If a string, it is treated as query condition (the WHERE clause); If an array, it is treated as the initial values for constructing a CDbCriteria object; Otherwise, it should be an instance of CDbCriteria. $params array parameters to be bound to an SQL statement. This is only used when the first parameter is a string (query condition). In other cases, please use CDbCriteria::params to set parameters. {return} CActiveRecord the record found. Null if no record is found.
这里讲解的很明确了,返回值类型是AR。因为查询代码直接用的:
User的model来find的,所以,调用 User models中的自定义方法是没问题的。
这种调用方法跟C++的虚函数调用原理差不多。父类指针调用子类的虚表中的函数,所以是安全的,也是合理的。
猫咪兔
注册时间:2012-02-04
最后登录:2019-08-09
在线时长:3小时41分
最后登录:2019-08-09
在线时长:3小时41分
- 粉丝1
- 金钱1045
- 威望0
- 积分1075