不使用@Assert 的图片上传验证
Image upload validation without using @Assert
我正在尝试强制上传图片。我已经在 @Assert\Valid
的集合类型上尝试过它,它在表单顶部生成错误 Image is missing!
即 error bubbling 然后我通过设置 false
删除了 error bubbling
。删除 error bubbling 后,我无法填充图像丢失错误。如何将错误映射到其表单元素,即 images
.
请使用 Symfony 或 jQuery 帮助我解决此问题并提供可能的解决方案。并建议哪一个最好以及为什么。
实体:XYZBundle\Entity\Abc.php
Class Abc
{
.....
/**
* @JMS\Groups({"details"})
* @JMS\Expose
*
*@Assert\Valid
* @var \Doctrine\Common\Collections\Collection
*/
private $images;
.....
表单类型: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,
))
.....
通过将以下代码添加到 AbcController 我现在可以显示错误了。我现在已经从实体 (XYZBundle\Entity\Abc.php) 中删除了 @Assert\Valid
。
控制器: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."));
}
唯一剩下的就是将错误映射到其表单元素之后。
我正在尝试强制上传图片。我已经在 @Assert\Valid
的集合类型上尝试过它,它在表单顶部生成错误 Image is missing!
即 error bubbling 然后我通过设置 false
删除了 error bubbling
。删除 error bubbling 后,我无法填充图像丢失错误。如何将错误映射到其表单元素,即 images
.
请使用 Symfony 或 jQuery 帮助我解决此问题并提供可能的解决方案。并建议哪一个最好以及为什么。
实体:XYZBundle\Entity\Abc.php
Class Abc
{
.....
/**
* @JMS\Groups({"details"})
* @JMS\Expose
*
*@Assert\Valid
* @var \Doctrine\Common\Collections\Collection
*/
private $images;
.....
表单类型: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,
))
.....
通过将以下代码添加到 AbcController 我现在可以显示错误了。我现在已经从实体 (XYZBundle\Entity\Abc.php) 中删除了 @Assert\Valid
。
控制器: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."));
}
唯一剩下的就是将错误映射到其表单元素之后。