cakephp 3构建规则,允许检查数据是否唯一并允许为空

时间:2016-03-07 07:51:13

标签: php cakephp business-rules cakephp-3.x

我想允许用户将电子邮件和电话留空注册功能。我还想要任何添加的电子邮件或电话号码。独一无二。 但是,构建规则中的isUnique函数正在停止此操作,因为它看到空白字段已存在。

public function buildRules(RulesChecker $rules)
{
    $rules->add($rules->isUnique(['username']));
    $rules->add($rules->isUnique(['email']));
    $rules->add($rules->isUnique(['phone']));
    return $rules;
}

我该如何解决这个问题? 我已经在验证中尝试了 - > allowEmpty但它不起作用。 文件中没有任何相关内容。具体如此。

2 个答案:

答案 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']);
}