在 cakephp 中检查 'isUniqueUsername' 似乎不起作用?
Checking for 'isUniqueUsername' in cakephp doesn't seem to work?
我有一个注册表单,当用户注册时,它会询问他们的用户名、密码和电子邮件。对于用户名,我有一些规则,例如:
- 必须是 5-12 个字符
- 必须是唯一的
- 只能使用字母、数字和破折号
尽管如此,我似乎无法让我的表单捕捉重复的用户名,我希望有人能帮我解决这个问题!
这是我的 User.php 模型的验证:
public $validate = array(
'username' => array(
'nonEmpty' => array(
'rule' => array('notEmpty'),
'message' => 'A username is required',
'allowEmpty' => false
),
'between' => array(
'rule' => array('between', 5, 15),
'required' => true,
'message' => 'Usernames must be between 5 to 15 characters'
),
'unique' => array(
'rule' => array('isUniqueUsername'),
'message' => 'This username is already in use'
)
)
);
为了示例,我删除了第三条规则 (alpha/number/dash)
接着我的函数检查我的数据库中的用户名:
function isUniqueUsername($check) {
$username = $this->find(
'all',
array(
'fields' => array(
'User.id',
'User.username'
),
'conditions' => array(
'User.username' => $check['username']
)
)
);
if(!empty($username)){
if($this->data[$this->alias]['id'] == $username['']['id']){
return true;
}else{
return false;
}
}else{
return true;
}
}
这里是 "Register"
的控制器函数
public function register() {
if ($this->request->is('post')) {
$this->User->create();
if ($this->User->save($this->request->data)) {
$this->Session->setFlash(__('The user has been created'));
$this->redirect($this->Auth->redirect());
} else {
$this->Session->setFlash(__('The user could not be created. Please, try again.'));
}
}
}
改变
'unique' => array(
'rule' => array('isUniqueUsername'),
'message' => 'This username is already in use'
)
到
'unique' => array(
'rule' => 'isUnique',
'message' => 'This username is already in use'
)
你不需要那个函数来检查唯一性,Cake 用魔法为你做了。
我有一个注册表单,当用户注册时,它会询问他们的用户名、密码和电子邮件。对于用户名,我有一些规则,例如:
- 必须是 5-12 个字符
- 必须是唯一的
- 只能使用字母、数字和破折号
尽管如此,我似乎无法让我的表单捕捉重复的用户名,我希望有人能帮我解决这个问题!
这是我的 User.php 模型的验证:
public $validate = array(
'username' => array(
'nonEmpty' => array(
'rule' => array('notEmpty'),
'message' => 'A username is required',
'allowEmpty' => false
),
'between' => array(
'rule' => array('between', 5, 15),
'required' => true,
'message' => 'Usernames must be between 5 to 15 characters'
),
'unique' => array(
'rule' => array('isUniqueUsername'),
'message' => 'This username is already in use'
)
)
);
为了示例,我删除了第三条规则 (alpha/number/dash)
接着我的函数检查我的数据库中的用户名:
function isUniqueUsername($check) {
$username = $this->find(
'all',
array(
'fields' => array(
'User.id',
'User.username'
),
'conditions' => array(
'User.username' => $check['username']
)
)
);
if(!empty($username)){
if($this->data[$this->alias]['id'] == $username['']['id']){
return true;
}else{
return false;
}
}else{
return true;
}
}
这里是 "Register"
的控制器函数public function register() {
if ($this->request->is('post')) {
$this->User->create();
if ($this->User->save($this->request->data)) {
$this->Session->setFlash(__('The user has been created'));
$this->redirect($this->Auth->redirect());
} else {
$this->Session->setFlash(__('The user could not be created. Please, try again.'));
}
}
}
改变
'unique' => array(
'rule' => array('isUniqueUsername'),
'message' => 'This username is already in use'
)
到
'unique' => array(
'rule' => 'isUnique',
'message' => 'This username is already in use'
)
你不需要那个函数来检查唯一性,Cake 用魔法为你做了。