在我的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
选项以将错误添加到此字段?
答案 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');
}
另见