从CakePHP中的Model获取用户信息

时间:2012-07-23 09:27:39

标签: cakephp cakephp-2.1

我刚学会了CakePHP,我希望用户在编辑自己的信息时输入旧密码。

在我的模型User.php

'password_old' => array(
                'match_old_password' => array(
                    'rule' => 'matchOldPassword',
                    'message' => 'Wrong password'
                ),
                'minlength' => array(
                    'rule'    => array('minLength', '8'),
                    'message' => 'Minimum 8 characters long'
                )
            )

我创建了一个函数matchOldPassword

public function matchOldPassword(){
        if($this->data['User']['password_old']==$current_password){
            return true;
        }
        return false;
}

我的问题是,如何在模型中获取当前用户密码的值?我使用CakePHP 2.1。

1 个答案:

答案 0 :(得分:2)

您可以像在控制器中一样从模型执行数据库查询。

因此,在您的用户模型中,您可以致电:

$this->find('first', array('conditions' => array('User.id' => $userId)));

$this->read(null, $userId);

当然,您必须将当前用户ID从控制器传递给模型方法。  如果您正在使用Cake提供的Auth组件,则可以致电$this->Auth->user('id')以检索当前登录用户的ID(如果您的意思是&#34} ;当前用户")。 $this->Auth->user()是一种控制器方法,因此无法在模型中使用。您的设置看起来大致如下:

UserModel方法:

public function getCurrentUserPassword($userId) {
  $password = '';
  $this->recursive = -1;
  $password = $this->read('password', $userId);
  return $password;
}

UsersController调用:

$userId = $this->Auth->user('id');
$this->User->getCurrentUserPassword($userId);