Cakephp 2.0验证问题

时间:2012-01-02 23:51:28

标签: validation cakephp-2.0

我正在使用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.'
    )
);

关于这种陌生感的任何想法?提前谢谢!

3 个答案:

答案 0 :(得分:2)

调用Model-> invalidFields()不会刷新错误。如果您需要一组无效字段,则可以使用Model-> validationErrors属性。

更多相关信息: https://cakephp.lighthouseapp.com/projects/42648/tickets/2597-model-invalidfields-add-validation-messages-each-time-it-s-called

答案 1 :(得分:0)

您是否尝试过将数据设置到模型的数据数组然后进行验证?我的猜测是需要明确调用验证。但是......您可以浏览lib文件夹中的蛋糕模型类来查找。

$this->Work->data = $data;
if($this->Work->validate()){
    $this->Work->saveAll();
}

答案 2 :(得分:0)

https://cakephp.lighthouseapp.com/projects/42648/tickets/2597-model-invalidfields-add-validation-messages-each-time-it-s-called

来自 Mark-story:

的答案
  

是的,这是它的工作原理。因为你使用的是较低级别的方法   validationErrors未重置。你应该使用create()+ save()来   自动刷新错误。或者如果你只是想要错误,你应该   访问Models-> validationErrors属性而不是调用   invalidFields()。