编辑:这是一个github,其中包含重现问题的完整代码
我有以下实体
class Place
{
use Traits\HasId;
/**
* Used for form.
*
* @Assert\Image(
* mimeTypes = {"image/png", "image/jpeg"},
* minWidth = 50,
* maxWidth = 1000,
* minHeight = 50,
* maxHeight = 1000,
* maxSize = "1M"
* )
*/
private $imageFile = null;
/**
* @ORM\OneToOne(targetEntity="MyImage", orphanRemoval=true, cascade={"persist"})
*/
protected $image;
}
使用以下表格
class AdminPlaceType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$transformer = new HasImageTransformer();
$builder->add('imageFile')->addModelTransformer($transformer);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(['data_class' => 'AppBundle\Entity\Place']);
}
}
以及以下型号的变压器
class HasImageTransformer implements DataTransformerInterface
{
public function transform($hasImage)
{
return $hasImage;
}
/**
* reverse transforms.
*/
public function reverseTransform($hasImage)
{
$file = $hasImage->getImageFile();
$myImage = new MyImage();
$myImage->setData(file_get_contents($file->getPathName()))
$myImage->setMimeType($file->getMimeType());
$hasImage->setImage($myImage);
}
}
我可以上传正确的图像,并且表格已正确保存在数据库中。
但是,如果我提交了不正确的图像(例如 .txt 文件),表格仍会保存在数据库中而不会出现任何错误
但是,如果我addModelTransformer
从表单中删除,那么我得到了正确的验证错误
此文件不是有效的图像
由于我的变压器没有修改原始imageFile
字段,我想知道是什么导致了这个问题。
我正在使用 php7 和 symfony3.3.4