登录模块错误:属性" loginfo ._id"没有定义


Login Module Error: Property "LoginForm._id" is not defined

我试图在Yii中创建一个登录模块,但我得到一个意想不到的错误:

LoginForm

属性"。

我在UserIdentify类上使用$_id变量。为什么显示LoginForm错误?_id未定义?

class UserIdentity extends CUserIdentity {
    /**
     * Authenticates a user.
     */
    private $_id;
    public function authenticate() {
        $user = Users::model()->findByAttributes(array('username' => $this->username));
        if ($user === null)
            $this->errorCode = self::ERROR_USERNAME_INVALID;
        else if ($user->password !== $this->password)
            $this->errorCode = self::ERROR_PASSWORD_INVALID;
        else {
            $this->_id = $user->id;
            $this->setState('lastLoginTime', $user->lastLoginTime);
            $this->errorCode = self::ERROR_NONE;
        }
        return !$this->errorCode;
    }
    public function getId() {
        return $this->id;
    }
}

你应该改正这个错误:

    /**
     * @return integer the ID of the user record
     */
    public function getId()
    {
        return $this->_id;
    }

loginfo .php代码如下:

/**
 * LoginForm class.
 * LoginForm is the data structure for keeping
 * user login form data. It is used by the 'login' action of 'SiteController'.
 */
class LoginForm extends CFormModel {
    public $username;
    public $password;
    public $rememberMe;
    private $_identity;
    /**
     * Declares the validation rules.
     * The rules state that username and password are required,
     * and password needs to be authenticated.
     */
    public function rules() {
        return array(
            // username and password are required
            array('username, password', 'required'),
            // rememberMe needs to be a boolean
            array('rememberMe', 'boolean'),
            // password needs to be authenticated
            array('password', 'authenticate'),
        );
    }
    /**
     * Declares attribute labels.
     */
    public function attributeLabels() {
        return array(
            'rememberMe' => 'Remeber me next time',
        );
    }
    /**
     * Authenticates the password.
     * This is the 'authenticate' validator as declared in rules().
     */
    public function authenticate($attribute, $params) {
        if (!$this->hasErrors()) {
            $this->_identity = UserIdentity::authenticate($this->username,$this->password);
            if (!$this->_identity) {
                $this->addError('password', 'Incorrect username or password.');
            }
        }
    }
    /**
     * Logs in the user using the given username and password in the model.
     * @return boolean whether login is successful
     */
    public function login() {
        if ($this->_identity === null) {
            $this->_identity = UserIdentity::authenticate($this->username,$this->password);
        }
        print_r($this->_identity->errorCode); die;
        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;
    }
}

这里是控制器代码:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
class UsersController extends Controller {
    /**
     * This is the action to handle external exceptions.
     */
    public function actionError() {
        if ($error = Yii::app()->errorHandler->error) {
            if (Yii::app()->request->isAjaxRequest)
                echo $error['message'];
            else
                $this->render('error', $error);
        }
    }
    /**
     * Displays the login page
     */
    public function actionLogin() {
        $model = new LoginForm;
        // if it is ajax validation request
        if (isset($_POST['ajax']) && $_POST['ajax'] === 'login-form') {
            echo CActiveForm::validate($model);
            Yii::app()->end();
        }
        // collect user input data
        if (isset($_POST['LoginForm'])) {
            $model->attributes = $_POST['LoginForm'];
            // validate user input and redirect to the previous page if valid
            if ($model->validate() && $model->login())
                $this->redirect(Yii::app()->user->returnUrl);
        }
        // display the login form
        $this->render('login', array('model' => $model));
    }
    /**
     * Logs out the current user and redirect to homepage.
     */
    public function actionLogout() {
        Yii::app()->user->logout();
        $this->redirect(Yii::app()->homeUrl);
    }
}

LoginForm没有变量$_id;

试着在你的loginfo .php中将变量声明为

private $_id;

不需要声明这个变量,只要试着看看