我有一个使用嵌入表单集合的表单。
在我的主要表单中,我对字段“评论”进行了验证。这个验证很简单,工作正常。 我的嵌入表单集合对待另一个实体。我想对此实体字段进行验证
| comment (min length = 5 ok) ------
| anotherfield (min length = 5 not ok)
| anotherfield (min length = 5 not ok)
我通过validation.yml文件调用两个表单验证规则:
My\Bundle\Entity\Main:
properties:
comment:
- Length:
min: 5
minMessage: "minmessage"
My\Bundle\Entity\EmbedEntity:
properties:
anotherfield:
- Length:
min: 5
minMessage: "minmessage"
但是第二次验证被忽略了,我的表单被提交了。 (没有错误返回并通过$form is->valid()
)
我的验证文件已被阅读。 (我对评论的第一次验证很好)
我错过了什么吗?
答案 0 :(得分:0)
"cascade_validation" => true
应该验证嵌入的表单。
此外,我认为您可以在验证文件的嵌入字段中添加Valid
以使其正常工作。
答案 1 :(得分:0)
使用Valid约束验证作为父对象的属性嵌入的对象
e.g。如果使用注释
/**
*
* @Assert\Valid
*/
private $items;
答案 2 :(得分:0)
将“error_bubbling”=> true添加到属性中,还会显示minMessages。 例如:
$builder->add('title', null, array('error_bubbling'=>true,"mapped" => true, "description" => "The title of the position"))
在集合构建器中 - >添加调用:
$builder->add(
'positionOwners',
'collection',
array(
'type' => new PositionOwnerType($this->positionOwnerFormSubscriber),
'allow_add' => true,
'allow_delete' => true,
'mapped' => true,
'error_bubbling'=>true,
'cascade_validation' => true
)
)
此外,setDefaultOptions应如下所示:
/**
* Set the default options of PositionType form
* @param OptionsResolverInterface $resolver
*/
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(
array(
'data_class' => 'Radsphere\RecruitmentBundle\Entity\PositionType',
'csrf_protection' => false,
'cascade_validation' => true,
'error_bubbling'=>true
)
);
}