【发布时间】:2014-02-20 19:50:02
【问题描述】:
深入用户模型
App::uses('SimplePasswordHasher','Controller/Component/Auth');
class User extends AppModel {
public $useTable = 'users';
public $hasMany = array(
'Reminder' => array(
'className' => 'Reminder'
)
);
public $validate = array(
'username' => array(
'alphaNumeric' => array(
'rule' => 'alphaNumeric',
'required' => true,
'message' => 'Alphabets and numbers only'
),
'between' => array(
'rule' => array('between',5,15),
'message' => 'Between 5 to 15 characters'
),
'unique' => array(
'rule' => 'isUnique',
'message' => 'Username is already taken'
)
),
'password' => array(
'between' => array(
'rule' => array('between',5,10),
'message' => 'Between 5 to 10',
),
'compareFields' => array(
'rule' => array('compareFields','confirm_password'),
'message' => 'Passwords do not match',
'required' => 'update'
)
),
'email' => array(
'email' => array(
'rule' => 'email',
'message' => 'Please enter valid email address'
),
'unique' => array(
'rule' => 'isUnique',
'message' => 'Email is already in use'
),
'compareFields' => array(
'rule' => array('compareFields','confirm_email'),
'message' => 'Emails do not match',
'required' => 'update'
)
),
'timezone' => array(
'isValid' => array(
'rule' => 'isValid',
'message' => 'Please select a timezone'
)
)
);
在用户控制器内部。
// Changed existing emails
if(!empty($this->request->data['User']['email'])) {
echo "Email is set <br/>";
$this->User->set($this->request->data['User']['email']);
if($this->User->validates(array('fieldList' => array('email')))) {
echo "Email is valid <br/>";
$this->User->id = $this->Session->read('Auth.User.id');
$this->User->saveField('email',$this->request->data['User']['email'],true);
$this->Session->setFlash("Settings updated");
}
}
// Change existing password
if(!empty($this->request->data['User']['password'])) {
echo "Password is set <br/>";
$this->User->set($this->request->data['User']['password']);
if($this->User->validates(array('fieldList' => array('password')))) {
echo "Password is valid <br/>";
$this->User->id = $this->Session->read('Auth.User.id');
$this->User->saveField('password', $this->request->data['User']['password'],true);
$this->Session->setFlash("Password changed");
}
}
我知道 'saveField()' 不会自动进行验证,所以我将验证参数设置为 true,但无济于事。
我已经包含了包含验证的模型。
任何帮助将不胜感激。
【问题讨论】:
-
您的验证是什么样的?它在其他情况下是否有效?
-
是的,我有一个注册页面,验证工作正常,但是设置页面会更新模型中现有的字段值。
-
你试过设置$this->User->set($this->request->data);而不是 $this->request->data['User']['password']; ?
标签: php cakephp cakephp-2.4