編輯字段使用Symfony3表單驗證:這裏的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
UPDATE:我的錯,只注意到你有設置兩個不同的特性。 ''MyImage''是Symfony \ Component \ HttpFoundation \ File \ File的後繼嗎? Symfony的ImageValidator可能不知道如何處理你的對象,所以它只是忽略它。 –
實際上,「MyImage」不是具有驗證器裝飾器集的人,它是數據庫中的實體(出於某種奇怪的原因,它是圖像存儲在BLOB字段中),imageFile字段是具有驗證器的字段,並且包含「 UploadedFile「對象。轉換器從UploadedFile創建一個MyImage對象 –
我試圖重現問題,但我有很多錯誤和問題...嘗試編寫所有文件,因爲這些不夠用... -1 – pooler