我正在尝试验证我的表单,其中有一个fileType字段。我使用断言来验证表单。验证对于fileType字段以外的所有字段均有效。只允许上传jpg jpeg和png文件,但是如果我尝试上传例如PDF文件,则说我的表格有效。
这是在数据库中保存文件名的字段的代码
/**
* @ORM\Column(name="imgHomepage", type="string")
* @Assert\File(
* maxSize = "1024k",
* mimeTypes = {"image/jpg", "image/jpeg", "image/png"},
* mimeTypesMessage = "Images must be jpg, jpeg or png"
* )
*/
private $imgHomepage = '';
这是我的文件类型的代码以我的实体的形式添加
->add('imgHomepage', FileType::class, [
'mapped' => false,
'data_class' => null,
'required' => false,
'error_bubbling' => true
])
这是我控制器的代码
$influencer = self::getInfluencerById($influencerId);
$influencerShowForm = self::CreateInfluencerForm($influencer);
$influencerShowForm->handleRequest($request);
if ($influencerShowForm->isSubmitted() && $influencerShowForm->isValid()) {
// handle form
}
我认为是因为未映射字段,所以它不会针对您的Assert批注所在的Entity对其进行验证。另外,该列是一个字符串,您的Assert说它必须是一个文件,您应该对没有定义(未映射)列的文件本身使用其他属性。
在FormType中添加constraints
字段时,尝试设置FileType
选项:
use Symfony\Component\Validator\Constraints as Assert;
...
->add('imgHomepage', FileType::class, [
'mapped' => false,
'data_class' => null,
'required' => false,
'error_bubbling' => true,
'constraints' => new Assert\File([
'maxSize' => '1024k',
'mimeTypes' => ["image/jpg", "image/jpeg", "image/png"],
'mimeTypesMessage' => "Images must be jpg, jpeg or png",
])
])
https://symfony.com/doc/current/components/form.html#form-validation