如何让RulesChecker向关联的模型添加错误?

时间:2016-10-21 14:18:36

标签: validation cakephp cakephp-3.0

在我的ContentsTable中,我添加了这样的应用程序规则,确保在保存时至少将一个ImageEntity添加到ContentEntity:

public function buildRules(RulesChecker $rules) {
    $rules
        ->add(function($entity, $options) {
            return $entity->get('type') !== 'gallery' || count($entity->images) > 0;
        }, 'validDate', [
            'errorField' => 'images.0.image',
            'message' => 'Lade mindestens ein Bild hoch!'
        ]);

    return $rules;
}

规则已应用,因为save()失败,但我希望定义的错误消息显示在Contents/edit.ctp的此表单输入中:

<?php echo $this->Form->input('images.0.image', [
    'label' => 'Neues Bild (optional)',
    'type' => 'file',
    'required' => false
]); ?>
但是,它根本没有添加。

如何设置errorField选项以将错误添加到此字段?

1 个答案:

答案 0 :(得分:1)

指定路径是不可能的,同样在实体上下文中,预期错误会出现在实际实体对象上,因此即使可以指定路径,也没有实体可以设置错误上。

您可以随时自行修改规则中的实体,但我并不过分相信这是一个好主意。无论如何,你必须做的是用images属性填充一个列表,该列表包含一个在image字段上有正确错误的实体,类似于:

->add(function($entity, $options) {
    if ($entity->get('type') !== 'gallery' || count($entity->images) > 0) {
        return true;
    }

    $image = $this->Images->newEntity();
    $image->errors('image', 'Lade mindestens ein Bild hoch!');

    $entity->set('images', [
        $image
    ]);

    return false;
});

另一个让我感觉更清洁的选择是设置images属性的错误,并在表单中手动评估,例如:

->add(
    function($entity, $options) {
        return $entity->get('type') !== 'gallery' || count($entity->images) > 0;
    },
    'imageCount',
    [
        'errorField' => 'images',
        'message' => 'Lade mindestens ein Bild hoch!'
    ]
);
if ($this->Form->isFieldError('images')) {
    echo $this->Form->error('images');
}

另见