SonataAdmin + VichUploader 不上传图片
SonataAdmin + VichUploader not uploading image
我已经使用 SonataAdmin 设置了 VichUploaderBundle,我不想使用 sonata 对实体上传图片进行分类。
表单渲染正常,实体保存正常,发送多部分数据和图像。但是它没有保存,也没有错误或可以调试的东西。
配置:
vich_uploader:
db_driver: orm
mappings:
category_image:
uri_prefix: /uploads/images/category
upload_destination: %kernel.root_dir%/../web/uploads/images/category
inject_on_load: true
delete_on_remove: true
delete_on_update: true
namer: vich_uploader.namer_origname
类别管理员:
$formMapper
->add('title', 'text', ['label' => 'title'])
->add('description', 'textarea', ['required' => false, 'label' => 'description'])
->add('image', 'file',
[
'required' => false,
'label' => 'image',
'data_class' => 'Symfony\Component\HttpFoundation\File\File',
'attr' => ['class' => 'sonata-medium-file'],
]
);
类别实体:
/**
* @ORM\Column(type="string", length=255, name="image_name", nullable=true)
*/
protected $imageName;
/**
* @Assert\File(
* groups={"list"},
* maxSize="500k",
* mimeTypes={"image/png", "image/jpeg", "image/pjpeg"},
* mimeTypesMessage = "constraint.mime_type"
* )
* @Vich\UploadableField(
* mapping="category_image",
* fileNameProperty="imageName"
* )
* @var File $image
*/
protected $image;
POST: 内容
Content-Disposition: form-data; name="s5519586317457[image]"; filename="ico.png"
内容类型:image/png
使用 VichUploaderBundle 和 Doctrine 需要了解两件事:
- 如果表单更新的唯一字段是文件,Doctrine 将不会检测到更改并且不会持久化(这 link 解释了为什么以及如何解决这个问题);
- 仅当可上传字段中存在
Symfony\Component\HttpFoundation\File\UploadedFile
个对象时,包才会触发上传机制,因此为您的字段定义一个 data_class
选项会破坏它(您可以安全地删除它)。
N.B :您可能还想检查您的实体是否定义为 @Vich\Uploadable
我已经使用 SonataAdmin 设置了 VichUploaderBundle,我不想使用 sonata 对实体上传图片进行分类。
表单渲染正常,实体保存正常,发送多部分数据和图像。但是它没有保存,也没有错误或可以调试的东西。
配置:
vich_uploader:
db_driver: orm
mappings:
category_image:
uri_prefix: /uploads/images/category
upload_destination: %kernel.root_dir%/../web/uploads/images/category
inject_on_load: true
delete_on_remove: true
delete_on_update: true
namer: vich_uploader.namer_origname
类别管理员:
$formMapper
->add('title', 'text', ['label' => 'title'])
->add('description', 'textarea', ['required' => false, 'label' => 'description'])
->add('image', 'file',
[
'required' => false,
'label' => 'image',
'data_class' => 'Symfony\Component\HttpFoundation\File\File',
'attr' => ['class' => 'sonata-medium-file'],
]
);
类别实体:
/**
* @ORM\Column(type="string", length=255, name="image_name", nullable=true)
*/
protected $imageName;
/**
* @Assert\File(
* groups={"list"},
* maxSize="500k",
* mimeTypes={"image/png", "image/jpeg", "image/pjpeg"},
* mimeTypesMessage = "constraint.mime_type"
* )
* @Vich\UploadableField(
* mapping="category_image",
* fileNameProperty="imageName"
* )
* @var File $image
*/
protected $image;
POST: 内容
Content-Disposition: form-data; name="s5519586317457[image]"; filename="ico.png"
内容类型:image/png
使用 VichUploaderBundle 和 Doctrine 需要了解两件事:
- 如果表单更新的唯一字段是文件,Doctrine 将不会检测到更改并且不会持久化(这 link 解释了为什么以及如何解决这个问题);
- 仅当可上传字段中存在
Symfony\Component\HttpFoundation\File\UploadedFile
个对象时,包才会触发上传机制,因此为您的字段定义一个data_class
选项会破坏它(您可以安全地删除它)。
N.B :您可能还想检查您的实体是否定义为 @Vich\Uploadable