YII:从另一个字段获取getLevel()值(不是PK)

时间:2013-01-15 07:14:58

标签: php yii

登录团队申请时我遇到了一些困难。这是代码.. 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

1 个答案:

答案 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'