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