2013-05-02 70 views
2

我正在调查CakePHP的(2.3.4)型号::保存方法将新记录保存期间允许部分空白数据,跑了一个小障碍:CakePHP的型号::记录插入

//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)); 

上述保存()将返回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

恕我直言,你所经历的是期望的行为。考虑你在表单中有两个相同的字段,并且用户只提供一个值为username。尽管email为空,但usernameemail字段均已提交。然后在服务器上,您尝试保存记录,只是发现它没有通过您向用户反馈的验证。另一方面,也许在您的系统中,创建一个用户而不需要电子邮件(例如root访问帐户)是完全可能的,CakePHP的验证实现允许这两种情况。

如果这种灵活性是不是你想要什么,只为您的验证规则的required属性作为true

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

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

+0

谢谢,所需的标志绝对是我正在寻找的。您对所布置的场景是正确的,并且我在模型更新期间使用过此行为。我遇到的问题是将随机无意义的数据发布到操作中,跳过验证并创建了一堆空记录。设置required => true肯定会强制验证数据数组中缺少的字段。 – Dedy 2013-05-02 07:43:02