imageName равно нулю, когда добавить изображение с помощью Vich Uploader с валидатором - PullRequest
0 голосов
/ 21 июня 2019

Когда я загружаю изображение с помощью Vich Uploader с проверкой, он вернет сообщение об ошибке «imageName не должно быть пустым». Я не могу понять причину, что это вызывает.


Конфигурация загрузчика Vich:

vich_uploader:
    db_driver: orm

    mappings:
        home_partner_alliance:
            uri_prefix: /image/home/partnerAlliance
            upload_destination: '%kernel.project_dir%/public/image/home/partnerAlliance'

Мой контроллер:

/* 
  --- router annotation ---
*/
public function addImage(Request $request, ValidatorInterface $validator)
{
    $file = $request->files->get('image');
    $home = new HomePartnerAlliance();
    $home->setImageFile($file);
    $home->setUpdatedAt(new \DateTime());

    $errors = $validator->validate($home);
    if(count($errors) == 0){
        $this->em->persist($home);
        $this->em->flush();
    }
    else
    {
        $messages = [];
        foreach($errors as $error)
        {
            $messages[$error->getPropertyPath()] = $error->getMessage();
        }
    }

    return new JsonResponse(['status'=> $messages]);
}

Моя сущность:

<?php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\HttpFoundation\File\File;
use Vich\UploaderBundle\Mapping\Annotation as Vich;
use Symfony\Component\Validator\Constraints as Assert;

/**
 * @ORM\Entity(repositoryClass="App\Repository\HomePartnerAllianceRepository")
 * @Vich\Uploadable
 */
class HomePartnerAlliance
{
/**
 * @ORM\Id()
 * @ORM\GeneratedValue()
 * @ORM\Column(type="integer")
 */
private $id;

/**
 * @Vich\UploadableField(mapping="home_partner_alliance", fileNameProperty="imageName")
 * @Assert\File(mimeTypes = {"image/jpeg", "image/png"})
 */
private $imageFile;

/**
 * @ORM\Column(type="string", length=255)
 */
private $imageName;

/**
 * @ORM\Column(type="date")
 */
private $updatedAt;

public function getId(): ?int
{
    return $this->id;
}

public function setImageFile(?File $imageFile = null): void
{
    $this->imageFile = $imageFile;

    if (null !== $imageFile) {
        // It is required that at least one field changes if you are using doctrine
        // otherwise the event listeners won't be called and the file is lost
        $this->updatedAt = new \DateTime();
    }
}

public function getImageFile(): ?File
{
    return $this->imageFile;
}

public function getImageName(): ?string
{
    return $this->imageName;
}

public function setImageName(?string $imageName): self
{
    $this->imageName = $imageName;

    return $this;
}

public function getUpdatedAt(): ?\DateTimeInterface
{
    return $this->updatedAt;
}

public function setUpdatedAt(\DateTimeInterface $updatedAt): self
{
    $this->updatedAt = $updatedAt;

    return $this;
}
}

Поэтому, когда я отправляю изображение на свой контроллер, он возвращает мне сообщение об ошибке:

{
  "status": {
    "imageName": "This value should not be null."
  }
}

Я пытаюсь загрузить недопустимый тип файла, он также вернет мне imageName Null:

{
  "status": {
    "imageFile": "The mime type of the file is invalid (\"image\/vnd.adobe.photoshop\"). Allowed mime types are \"image\/jpeg\", \"image\/png\".",
    "imageName": "This value should not be null."
  }
}

Но когда я удаляю проверочный код в моем контроллере, он успешно добавляет изображение в папку и имя изображения сохраняется в базе данных. Любое решение для этой проблемы?

1 Ответ

0 голосов
/ 21 июня 2019

Я думаю, что вы пропустили свойство namer в вашем отображении Vich.

vich_uploader:
    db_driver: orm

    mappings:
        home_partner_alliance:
            uri_prefix: /image/home/partnerAlliance
            upload_destination: '%kernel.project_dir%/public/image/home/partnerAlliance'
            namer: Vich\UploaderBundle\Naming\UniqidNamer
...