我有一张表格:
class ArticleType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('autor', AutorType::class)
->add('categories', CollectionType::class, array(
'entry_type' => CategoryType::class,
'error_bubbling' => false,
))
->add('submit', SubmitType::class)
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => Article::class,
));
}
}
这会嵌入到自定义表单中。我的文章实体看起来像这样:
class Article
{
/**
* @Assert\Type(type="AppBundle\Model\Autor")
* @Assert\Valid()
*/
private $autor;
/**
*
* @Assert\All({
* @Assert\Type(type="AppBundle\Model\Category")
* })
* @Assert\Valid()
*/
private $categories;
}
我的问题是类别字段错误(例如,类别名称不是空白);错误永远不会映射到字段本身。
使用'error_bubbling' => true
,错误是使用ArticleType表单映射。
使用'error_bubbling' => false
,错误将映射到集合
CollectionType但从不属于CategoryType的CategoryType表单或名称。
我使用的是Symfony 3.3并且无法使用cascade_validation
,我使用@Assert\Valid()
但它似乎无法正常工作。
我哪里做错了?
感谢您的帮助。
答案 0 :(得分:1)
尝试使用Valid()
作为表单约束而不是第一类。 (务必删除类Valid
约束)
刚遇到同样的事情,经过20次组合之后,这对我来说就是解决方案。我虽然在symfony 3.2上。
use Symfony\Component\Validator\Constraints\Valid;
class ArticleType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('autor', AutorType::class)
->add('categories', CollectionType::class, array(
'entry_type' => CategoryType::class,
'error_bubbling' => false,
'constraints' => [
new Valid(),
],
))
->add('submit', SubmitType::class)
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => Article::class,
));
}
}
答案 1 :(得分:0)
尝试为收集条目设置error_bubbling
选项。不是集合本身。因为该错误不是发生在集合中,而是发生在集合中的类别项目上。
$builder
->add('autor', AutorType::class)
->add('categories', CollectionType::class, array(
'entry_type' => CategoryType::class,
'entry_options' => [
'error_bubbling' => false,
],
))
->add('submit', SubmitType::class)
;
或在您的CategoryType
中将其设置为默认值:
// AppBundle\Form\Type\CategoryType.php
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Category::class,
'error_bubbling' => false,
// maybe other options
]);
}