1

我的实体都是使用设置的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.ymlGiftList实体

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);
}

回顾一下,我可以保存图像标题,但图像本身和最终图像名称没有被保存。我将非常感谢这方面的任何帮助。

4

0 回答 0