我正在使用cakephp 2.0.2。我正在保存一个相对简单的模型关联。具有与图像的一对多关联的工作模型。我发现这两个模型的验证是以不可预测的方式进行的。
当我使用完全有效的格式进行保存时:
$this->Work->saveAll($this->data);
我可以成功保存数据,但是当我打电话时:
$this->Work->invalidFields();
我实际上看到工作模型规则的验证失败,即使表单不应该触发它们。
Array
(
[title] => Array
(
[0] => Please enter a title.
)
[copy] => Array
(
[0] => Please enter project copy.
)
)
进一步尝试。如果我重新提交标题字段有意留空的表单,我会从$this->Work->invalidFields()
电话中获得以下内容:
Array
(
[title] => Array
(
[0] => Please enter a title.
[1] => Please enter a title.
)
)
因此,默认情况下,规则无论是否真正无效,都会显示一次。如果该字段确实无效,那么再次。
最后,对于后代,我的简单验证规则是:
public $validate = array(
'title' => array(
'rule' => 'notEmpty',
'required' => true,
'message' => 'Please enter a title.'
),
'copy' => array(
'rule' => 'notEmpty',
'required' => true,
'message' => 'Please enter project copy.'
)
);
关于这种陌生感的任何想法?提前谢谢!
答案 0 :(得分:2)
调用Model-> invalidFields()不会刷新错误。如果您需要一组无效字段,则可以使用Model-> validationErrors属性。
答案 1 :(得分:0)
您是否尝试过将数据设置到模型的数据数组然后进行验证?我的猜测是需要明确调用验证。但是......您可以浏览lib文件夹中的蛋糕模型类来查找。
$this->Work->data = $data;
if($this->Work->validate()){
$this->Work->saveAll();
}
答案 2 :(得分:0)
来自 Mark-story:
的答案是的,这是它的工作原理。因为你使用的是较低级别的方法 validationErrors未重置。你应该使用create()+ save()来 自动刷新错误。或者如果你只是想要错误,你应该 访问Models-> validationErrors属性而不是调用 invalidFields()。