CakePHP模型::在插入记录期间保存允许的部分空白数据

CakePHP模型::在插入记录期间保存允许的部分空白数据,php,cakephp,model,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($th

我在研究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推荐的方法来处理部分空数据集?非常感谢

编辑: 谢谢山姆·德莱尼的提示。如果其他人被难倒,这就成功了:

此键接受布尔值、创建或更新。将此键设置为true将使该字段始终为必填字段。将其设置为“创建”或“更新”将使该字段仅用于更新或创建操作如果“required”计算为true,则该字段必须存在于数据数组中。例如,如果验证规则定义如下:


我最初烘焙了模型,但忘记了验证规则中遗漏了
required=>true
。将其设置为
true
'create'
可以避免由于杂乱的数据数组而插入空白记录。

IMHO您所经历的是期望的行为。考虑在表单中有相同的两个字段,用户只提供代码<用户名< /代码>的值。即使
电子邮件
为空,
用户名
电子邮件
字段也会提交。然后,在服务器上,您尝试保存记录,但发现该记录未通过验证,并将其反馈给用户。另一方面,也许在您的系统中完全可以创建用户而不需要电子邮件(例如
root
access帐户),CakePHP的验证实现允许这两种情况

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

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

这将满足您的全有或全无要求。

谢谢您,所需的标志绝对是我想要的。您所列出的场景是正确的,我在过去的模型更新过程中也使用过这种行为。我遇到的问题是,将随机无意义的数据发布到操作中会跳过验证,并创建一堆空记录。设置required=>true当然会强制验证数据数组中缺少的字段。