如何防止CakePHP验证不在$ fieldList中的字段?

时间:2015-11-30 04:14:38

标签: php validation cakephp cakephp-2.x

我使用CakePHP2.7.5并且我的模型save函数失败,因为它正在尝试验证$fieldList参数中未指定的字段。

根据Cookbooksave方法将$fieldList作为第三个参数,将保存的字段限制为$fieldList中列出的字段。

Model::save(array $data = null, boolean $validate = true, array $fieldList = array())

我在模型中调用save,如下所示:

$this->save($data, true, ['name', 'place']);

$ data是这样的:

[ 'ModelName' => [ 'id' => $id, 'name' => 'abcdef', 'place' => 'ghijklmn' ] ]

但它失败了,因为$data中未显示的必填字段出现验证错误。它应该以这种方式工作吗?

我是否必须在$data中为必填字段添加一些虚拟数据?

2 个答案:

答案 0 :(得分:0)

您可能需要在验证规则中将 required 设置为false:

public $validate = array(
    'description' => array(
        'alphaNumeric' => array(
            'rule' => 'alphaNumeric',
            'required' => false,
            'message' => 'You have to enter a valid description'
        )
);

}

CakePHP 2.x Validation: 'required'

答案 1 :(得分:0)

我自己找到了答案。在Cake的Model::save函数中,第二个参数$validate可能是一个数组,只有当它是一个数组时才会出现此问题。 (所以,我在上面问题中的例子并不准确。)

所以,这个应该按预期工作(仅验证和保存'name'和'place'),

$this->save($data, true, ['name', 'place']);

但是这个没有,

$this->save($data, ['validate' => true], ['name', 'place']);

实际上我是这样做的。 (因为我不得不把'原子'弄错,这就是怎么做的。)

$this->save($data, ['validate' => true, 'atomic' => false], ['name', 'place']);

就我而言,这是解决方案。

$this->save($data, ['validate' => true, 'atomic' => false, 'fieldList' => ['name', 'place']);