2013-05-29 1 views
0

Я пытаюсь создать модуль входа в Yii, но я получаю неожиданное сообщение об ошибке:Войти Модуль Error: Свойство «LoginForm._id» не определена

Property "LoginForm._id" is not defined.

Я использую $_id переменный в классе UserIdentify , Почему в нем отображается ошибка, которая не указана в 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; 
    } 

} 

ответ

2

Вы должны исправить опечатку:

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

** Валерий Viktorovsky ** спасибо и, для ответа, но после изменения параметров Опечатка снова повторяет ту же ошибку. –

+0

Можете ли вы показать класс LoginForm и контроллер auth? –

+0

Спасибо ** Валерий ** У меня есть решение этой ошибки, и я очень полезен для вас. :) –

0

Вот код LoginForm.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); 
    } 

} 
0

LoginForm не имеет переменной с именем $ _id;

Просто попробуйте объявить переменную в вашем LoginForm.php, как

private $_id; 

Нет необходимости объявить эту переменную, а просто попробовать и посмотреть

+0

ok позвольте мне попробовать. –

+0

Я попробовал, объявив переменную $ _id в LoginForm.php вместе с закрытым ключевым словом, опять же вспыхнула такая же ошибка. –

Смежные вопросы