0

チーム アプリケーションへのログイン中にスタックしました。ここにコードがあります.. 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 (私のモデルの 1 つ)

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.phpprint_r ($user);に配置して、$user のビューの種類を確認します。しかし、それは何の効果もありませんでした。:( 私の質問は、そのコードで何かを見逃していましたか?私の意見では、すべてのオブジェクトが完成しているためです。この問題を解決するための提案があることを願っています。よろしくお願いします。:D

4

1 に答える 1

1

$user=$this->loadUser();ID が設定されていないか ID が見つからないためにモデルが見つからない場合は、NULL を返します。

そのため$user->kdstpeg、エラーを呼び出す NULL のメンバー kdstpeg を取得しようとします。かどうかを確認する必要があります。$user !== null

2番目の注意: print_rはNULLを表示しません。var_dumpを実行することをお勧めします。これにより、ダンプする変数のタイプもわかります

編集 数値を比較する場合は、使用しないでください 02の値がDB で 02 の場合、文字列になりますが整数 2 を再度チェックし、false を返すため、必要または$user->kdstpeg$user->kdstpeg == 02(int)$user->kdstpeg === 2$user->kdstpeg === '02'

于 2013-01-15T08:35:45.413 に答える