将文件验证约束传递给通用FileType实体

时间:2017-01-17 15:27:40

标签: php validation constraints symfony

我正在创建一个包含文件引用对象的包,该对象对自身没有约束,因为它将是一个通用对象。它可能存储图像或任何其他类型的文件,我需要尽可能保持通用。

其他bundle正在使用我的FileType引用,我需要通过约束将文件验证分配给该对象。我如何强制对引用的文件对象进行文件验证?

通用文件类型:

namespace ICC\FileCabinetBundle\Form;

use ICC\FileCabinetBundle\Entity\FileRef;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\FileType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;

/**
 * Comment form.
 */
class FileCabinetType extends AbstractType
{
    /**
     * {@inheritDoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('file', FileType::class, [
                    'label' => false,
                    'mapped' => false,
                    'required' => false
                ]
            )
        ;
    }

    /**
     * {@inheritDoc}
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => FileRef::class,
        ]);
    }
}

正在调用我的通用FileType的实体,我需要它来验证这个通用实体进入图像验证。请注意,我创建约束的尝试在那里不起作用,但如果我将它插入到我的通用对象中,它就会出现。

namespace ICC\UserBundle\Form;

use ICC\UserBundle\Entity\User;
use ICC\FileCabinetBundle\Form\FileCabinetType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Validator\Constraints\File;

/**
 * User Profile form.
 */
class UserProfileType extends AbstractType
{
    /**
     * {@inheritDoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('fileRef', FileCabinetType::class, [
                'attr' => ['class' => 'box__file'],
                'label' => 'form.profile.edit.file_ref',
                'required' => false,
                'constraints' => [
                    new File([
                        'maxSize' => '2048k',
                        'mimeTypes' => [
                            'image/jpeg',
                            'image/png'
                        ],
                        'mimeTypesMessage' => 'icc_filecabinet.file.mime'
                    ])
                ]
            ])
            ->add('firstName', TextType::class, ['label' => 'form.profile.edit.first_name'])
            ->add('lastName', TextType::class, ['label' => 'form.profile.edit.last_name'])
            ->add('submit', SubmitType::class, ['label' => 'form.profile.edit.submit']);
    }

    /**
     * {@inheritDoc}
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => User::class,
        ]);
    }
}

0 个答案:

没有答案