我想允许用户将电子邮件和电话留空注册功能。我还想要任何添加的电子邮件或电话号码。独一无二。 但是,构建规则中的isUnique函数正在停止此操作,因为它看到空白字段已存在。
public function buildRules(RulesChecker $rules)
{
$rules->add($rules->isUnique(['username']));
$rules->add($rules->isUnique(['email']));
$rules->add($rules->isUnique(['phone']));
return $rules;
}
我该如何解决这个问题? 我已经在验证中尝试了 - > allowEmpty但它不起作用。 文件中没有任何相关内容。具体如此。
答案 0 :(得分:2)
要改善神圣的回答,您应该在用户实体
中执行此操作//Entity/User.php
protected function _setPhone($value)
{
if($value == '') {
$value = null;
}
return $value;
}
答案 1 :(得分:0)
如果你仍然没有找到解决方案,我就有一个。 我今天遇到了同样的问题,我发现的是空字段的值为''它不等于null。 所以,你需要做的是,在add()和edit()函数中,或者你用来将手机写入数据库的任何函数,你必须检查手机字段是否等于'&# 39 ;.如果是,则只为其指定null。 例如:
public function add()
{
//todo: check for conflicting email and phone
$user = $this->Users->newEntity();
if ($this->request->is('post')) {
$user = $this->Users->patchEntity($user, $this->request->data);
//LOOK AT THESE TWO LINES
if($user->phone == '') {
$user->phone = null;
}
if ($this->Users->save($user)) {
$this->Flash->success(__('The user has been saved.'));
return $this->redirect(['action' => 'index']);
} else {
$this->Flash->error(__('The user could not be saved. Please, try again.'));
}
}
$roles = $this->Users->Roles->find('list', ['limit' => 200]);
$this->set(compact('user', 'roles'));
$this->set('_serialize', ['user']);
}