symfony4 handleRequest无法与形式的fileType一起正常使用

问题描述 投票:0回答:1

我正在尝试验证我的表单,其中有一个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
}
forms symfony4 assert file-type
1个回答
0
投票

我认为是因为未映射字段,所以它不会针对您的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

© www.soinside.com 2019 - 2024. All rights reserved.