CakePHP Model :: save在记录插入期间允许部分空白数据

时间:2013-05-02 04:27:34

标签: php cakephp model

我正在调查CakePHP(2.3.4)Model :: save方法以插入新记录并遇到一些障碍:

//Two fields provided, email field intended to fail validation
$data = array('Member' => array(
    'username' => 'hello',
    'email' => 'world'
));
$this->Member->create();
var_dump($this->Member->save($data, true));

上面的save()将返回false,并且不会将数据写入数据库。但是,如果我将数据更改为:

//One field provided, intended to pass validation
$data = array('Member' => array(
    'username' => 'hello'
));

然后save()将尝试使用空白电子邮件字段将新记录写入数据库。我意识到在更新期间跳过未指定字段的验证可能是一个有用的行为,但是在创建新记录时是否有CakePHP推荐的方法来处理部分空数据集?非常感谢。

修改 感谢Sam Delaney的提示。如果其他人感到难过,这就是诀窍:CakePHP Data Validation: field 'required' key

  

此键接受布尔值,或创建或更新。将此键设置为true将使该字段始终是必需的。将其设置为创建或更新将使该字段仅用于更新或创建操作。 如果'required'被评估为true,则该字段必须存在于数据数组中。例如,如果验证规则定义如下:

我最初对该模型进行了烘焙,并忘记了required => true被排除在验证规则之外。将其设置为true'create'将避免由于乱码数据而插入空白记录。

1 个答案:

答案 0 :(得分:1)

恕我直言,你所经历的是所期望的行为。考虑到表单中有两个相同的字段,用户只提供username的值。即使username为空,也会提交emailemail字段。然后在服务器上,您尝试仅保存记录,以确定它已验证失败,并将其反馈给用户。另一方面,也许在您的系统中,完全可以在不需要电子邮件的情况下创建用户(例如root访问帐户),CakePHP的验证实现允许这两种情况。

如果这种灵活性不符合您的要求,只需将验证规则的required属性设置为true

public $validate = array(
    'email' => array(
        'rule'     => 'email',
        'required' => true
    )
);

这将满足您的全部或全部要求。