在集合上形成错误映射

时间:2017-07-06 11:26:31

标签: symfony symfony-3.3

我有一张表格:

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()但它似乎无法正常工作。

我哪里做错了?

感谢您的帮助。

2 个答案:

答案 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
    ]);
}