我的实体都是使用设置的yml
,我正试图围绕如何设置 VichUploaderBundle。
我想要做什么
我想做的是开发一个API,我需要用户提交一个带有名称的图像,我想将提交的信息保存在数据库中并将文件上传到服务器上
什么有效,什么无效
我正在使用 Postman 提交信息,正如您在下面的屏幕截图中看到的那样,正在提交一个名称和一个图像字段,在提交时名称被保存但图像没有被上传并且图像名称字段也是空的。
我的尝试
我将在这里分享所有代码,它可能看起来又长又无聊,但我需要帮助 :)
在我的里面我config.yml
添加了VichUploaderBundle
配置
vich_uploader:
db_driver: orm
mappings:
gift_image:
uri_prefix: /uploads/gifts
upload_destination: %kernel.root_dir%/../web/uploads/gifts
这是我orm.yml
的GiftList
实体
AppBundle\Entity\GiftList:
type: entity
table: null
repositoryClass: AppBundle\Repository\GiftListRepository
id:
id:
type: integer
id: true
generator:
strategy: AUTO
fields:
name:
type: string
length: 255
image_name:
type: text
nullable: true
lifecycleCallbacks: { }
这是我的 VichUploaderBundle 映射文件
AppBundle\Entity\GiftList:
file:
mapping: gift_image
filename_property: image_name
这是我的实体
namespace AppBundle\Entity;
use Symfony\Component\HttpFoundation\File\File;
/**
* GiftList
*/
class GiftList
{
/**
* @var integer
*/
private $id;
/**
* @var string
*/
private $name;
/**
* @var string
*/
private $image_name;
/**
* @var File $image
*/
protected $image;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set name
*
* @param string $name
*
* @return GiftList
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
/**
* Get name
*
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* Set imageName
*
* @param string $imageName
*
* @return GiftList
*/
public function setImageName($imageName)
{
$this->image_name = $imageName;
return $this;
}
/**
* Get imageName
*
* @return string
*/
public function getImageName()
{
return $this->image_name;
}
/**
* @return File
*/
public function getImage()
{
return $this->image;
}
/**
* @param File $image
*/
public function setImage(File $image)
{
$this->image = $image;
}
}
这是我的表格
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name')
->add('image', VichFileType::class)
;
}
现在终于控制器
public function postGiftAction(Request $request){
$this->denyAccessUnlessGranted('ROLE_USER');
$gift = new GiftList();
$form = $this->createForm(GiftListType::class , $gift, ['csrf_protection' => false]);
$form->submit($request->request->all());
if($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($gift);
$em->flush();
$view = $this->view($gift, 200);
}else{
$view = $this->view(['form' => $form], 400);
}
return $this->handleView($view);
}
回顾一下,我可以保存图像标题,但图像本身和最终图像名称没有被保存。我将非常感谢这方面的任何帮助。