1

我有一个表格:

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()但它似乎没有像我预期的那样工作。

我哪里做错了?

谢谢你的帮助。

4

2 回答 2

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,
        ));
    }
}
于 2017-12-04T13:14:47.910 回答
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
    ]);
}
于 2018-10-16T10:36:11.227 回答