登录团队申请时我遇到了一些困难。这是代码.. EWebUser.php
<?php
class EWebUser extends CWebUser{
protected $_model;
protected function loadUser()
{
if ( $this->_model === null ) {
$this->_model = StaffDb::model()->findByPk($this->id);
}
return $this->_model;
}
function getLevel()
{
$user=$this->loadUser();
if ($user->kdstpeg == 02){
if(substr($user->kdorg,1,4) == '0000') $level=1;
else if (substr($user->kdorg,2,3) == '000') $level=2;
return $level;
}
return 100;
}
UserIdentity.php
<?php
class UserIdentity extends CUserIdentity
{
private $_id;
public function authenticate()
{
$username = strtolower($this->username);
$user = MUser::model()->find('LOWER(username)=?', array($username));
if($user===null)
$this->errorCode=self::ERROR_USERNAME_INVALID;
else if ($user->pwd!=$this->password)
$this->errorCode = self::ERROR_PASSWORD_INVALID;
else
{
$this->_id = $user->oldStaffCode;
$this->username = $user->username;
$this->errorCode = self::ERROR_NONE;
}
return $this->errorCode == self::ERROR_NONE;
}
public function getId()
{
return $this->_id;
}
}
和StaffDb.php(我的模特之一)
public static function model($className=__CLASS__)
{
return parent::model($className);
}
public function tableName()
{
return 'staffdb';
}
public function rules()
{
return array(
array('oldStaffCode', 'required'),
... array('kdstpeg', 'max'=>2),
array('...', 'safe'),
array('oldStaffCode, kdstpeg, ...', 'safe', 'on'=>'search'),
);
}
public function primaryKey()
{
return 'oldStaffCode';
}
当我尝试访问此应用程序时,会显示错误“试图获取非对象的属性”。然后,我将此代码放在EWebUser.php print_r ($user);
上,以查看$ user的视图类型。但它没有任何影响。 :(
我的问题是,我错过了那些代码吗?因为在我看来,所有的对象都是完整的。我希望有一个解决这个问题的建议。提前致谢。 :d
答案 0 :(得分:1)
如果$user=$this->loadUser();
找不到任何模型,因为id未设置或id未找到,则返回NULL
所以$user->kdstpeg
将尝试获取NULL的成员kdstpeg来调用错误。
您需要检查$user !== null
关于第二点: print_r不显示NULL,你最好做var_dump,这也会告诉你转储的变量的类型
修改强>
如果您要比较数字,则不应使用 02 ,如果数据库中$user->kdstpeg
的值为02,则为字符串,而$user->kdstpeg == 02
将再次检查整数2,并且将返回false,因此您需要(int)$user->kdstpeg === 2
或$user->kdstpeg === '02'