【问题标题】:Form error mapping on collection集合上的表单错误映射
【发布时间】:2017-07-06 11:26:31
【问题描述】:

我有一个表格:

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

我哪里做错了?

感谢您的帮助。

【问题讨论】:

    标签: symfony symfony-3.3


    【解决方案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,
            ));
        }
    }
    

    【讨论】:

      【解决方案2】:

      尝试将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
          ]);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-13
        • 2021-12-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多