2

我正在研究 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'将避免我由于乱码数据数组而插入空白记录。

4

1 回答 1

1

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

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

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

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

于 2013-05-02T07:08:23.067 回答