不使用@Assert进行图像上传验证

时间:2016-09-01 12:25:35

标签: php jquery symfony symfony-3.1

我试图强制进行图片上传。我已经在@Assert\Valid的集合类型上尝试了它,它在表单顶部生成错误Image is missing!,即 错误冒泡 然后我通过设置error bubbling删除了false。删除 错误冒泡 后,我无法填充图片丢失错误。如何将错误映射到其表单元素,即images

请帮助&通过使用Symfony或jQuery为我提供可能的解决方案。并且还建议哪一个最好&这是为什么。

实体:XYZBundle \ Entity \ Abc.php

     Class Abc
     {
         .....

         /**
         * @JMS\Groups({"details"})
         * @JMS\Expose
         *
         *@Assert\Valid
         * @var \Doctrine\Common\Collections\Collection
         */
        private $images;

        .....

FormType:XYZBundle \ Entity \ AbcType.php

     public function buildForm(FormBuilderInterface $builder, array $options)
        {
           .....

            ->add('images', CollectionType::class, array(
                    'entry_type' => MediaType::class,
                    'label' => false,
                    'allow_add' => true,
                    'allow_delete' => true,
                    'by_reference' => false,
                    'prototype' => true,
                    'error_bubbling' => false,

                ))

           .....

1 个答案:

答案 0 :(得分:0)

通过将以下代码添加到 AbcController ,我现在可以显示错误。我现在已从实体中移除了@Assert\Valid(XYZBundle \ Entity \ Abc.php)。

控制器:AbcController.php

 $images = $form['images']->getData();
            $imageExist=false;
            foreach ($images as $image){
                if(!empty($image->getFilename())){
                    $imageExist=true;
                    break;
                }
            }
            if(!$imageExist){
                $form['images']->addError(new FormError("Please upload at least one image."));
            }

唯一剩下的就是在表单元素之后映射错误。