1

使用 Vich Uploader Bundle 上传我的图像工作正常,它们存储在正确的目录和数据库中。但是,当尝试访问它们或显示它们时,找不到它们。(找不到对象异常或仅显示一个空方块。

任何想法为什么会这样?

配置:

vich_uploader:
    db_driver: orm
    mappings:
       carousel:
            uri_prefix: %kernel.root_dir%/web/uploads/carousel
            upload_destination: '%kernel.root_dir%/web/uploads/carousel'
            namer: vich_uploader.namer_origname

此外,我的 imageFile 设置器根本不起作用。第一次上传图片时,除了 imageFile 之外,一切都设置好了(updatedAt、imageSize、imageName),它总是为空。

例如

  Image {#1601 ▼ 
    -id: 1 
    -imageFile: null 
    -imageSize: 34703 
    -imageName: "5a7f9db650f78_EntityType.png" 
    -updatedAt: DateTime {#1599 ▼ 
    } 
  }

这是我的实体:

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\HttpFoundation\File\File;
use Symfony\Component\Validator\Constraints as Assert;
use Vich\UploaderBundle\Mapping\Annotation as Vich;
/**
* Image
*
* @ORM\Table(name="app_image")
* @ORM\Entity
* @Vich\Uploadable
*/
class Image {

  /**
   * @var integer
   *
   * @ORM\Column(name="id", type="integer")
   * @ORM\Id
   * @ORM\GeneratedValue(strategy="AUTO")
   */
  private $id;

  /**
   * NOTE: This is not a mapped field of entity metadata, just a simple property.
   *
   * @Vich\UploadableField(mapping="carousel", fileNameProperty="imageName", size="imageSize")
   * @Assert\File()
   * @var File
   */
  private $imageFile;

  /**
    * @ORM\Column(type="integer")
    *
    * @var integer
    */
   private $imageSize;

   /**
    * @var string
    * @ORM\Column(type="string", nullable=false)
    */
   private $imageName;

   /**
   * @ORM\Column(type="datetime")
   *
   * @var \DateTime
   */
  private $updatedAt;

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

    /**
    *
    * @param \Symfony\Component\HttpFoundation\File\File|\Symfony\Component\HttpFoundation\File\UploadedFile $file
    *
    * @return File
  */
    public function setImageFile(\Symfony\Component\HttpFoundation\File\File $image = null)
    {
      $this->imageFile = $image;
      if ($image instanceof File) {
        $this->updatedAt = new \DateTime();
      }
      return $this;
    }


    /**
     * Get id
     *
     * @return integer
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set updatedAt
     *
     * @param \DateTime $updatedAt
     *
     * @return Image
     */
    public function setUpdatedAt($updatedAt)
    {
        $this->updatedAt = $updatedAt;

        return $this;
    }

    /**
     * Get updatedAt
     *
     * @return \DateTime
     */
    public function getUpdatedAt()
    {
        return $this->updatedAt;
    }

    /**
     * Set imageSize
     *
     * @param integer $imageSize
     *
     * @return Image
     */
    public function setImageSize($imageSize)
    {
        $this->imageSize = $imageSize;

        return $this;
    }

    /**
     * Get imageSize
     *
     * @return integer
     */
    public function getImageSize()
    {
        return $this->imageSize;
    }

    /**
     * Set imageName
     *
     * @param string $imageName
     *
     * @return Image
     */
    public function setImageName($imageName)
    {
        $this->imageName = $imageName;

        return $this;
    }

    /**
     * Get imageName
     *
     * @return string
     */
    public function getImageName()
    {
        return $this->imageName;
    } 

}

我有一种感觉,这是由我的安装或其他任何事情中的“更深层次”问题引起的,因为在那之前一切正常。如果我例如部分

      if ($image instanceof File) {
    $this->updatedAt = new \DateTime();
  }

setter 的注释被注释掉,我得到一个updatedAt 不能为 null的异常,因此以某种方式访问​​了 setter,但它没有将图像设置为上传的文件。我是否使用了错误的目录或错误的访问权限,或者可能是什么?

先感谢您!

4

3 回答 3

0

公共函数configureFields(字符串$pageName):可迭代{返回[

        TextField::new('name'),
        //TextareaField::new('imageFile')->setFormType(VichImageType::class)->hideOnIndex(),
        AssociationField::new('category'),
        BooleanField::new('status'),
        NumberField::new('price'),
        //ImageField::new('imageFile')->setBasePath($this->getParameter("app.path.product_images"))->onlyOnIndex(),

ImageField::new('imageFile')->setFormType(VichImageType::class)->onlyOnIndex(),

     ImageField::new('image',"product image")->setBasePath('/uploads/images/products/')->setUploadDir('/public/uploads/images/products/')->setUploadedFileNamePattern('[randomhash],[extension]')->setRequired(false),
     TextField::new('description'),
    ];
}
于 2021-11-15T19:35:27.007 回答
0

vich_uploader: db_driver: orm

mappings:
    product:
        uri_prefix: '%app.path.product_images%'
        upload_destination: '%kernel.project_dir%/uploads/images/products'
        namer: Vich\UploaderBundle\Naming\SmartUniqueNamer 
        inject_on_load:     false
        delete_on_remove : false
        delete_on_update: false
于 2021-11-15T19:45:58.197 回答
0

我遇到过同样的问题。至少在我这边,这是一个服务器配置的事情。

如果你运行 syfmony 的服务器,它将像一个 charm php bin/console server:run

如果你运行php服务器,图片将不会显示 php -S 127.0.0.1:8000 -t public

于 2019-10-28T12:10:19.067 回答