使用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的setter根本不起作用。第一次上传Image时,除了imageFile之外,所有内容都已设置(updatedAt、imageSize、imageName),imageFile始终为null。
例如
Image {#1601 ▼
-id: 1
-imageFile: null
-imageSize: 34703
-imageName: "5a7f9db650f78_EntityType.png"
-updatedAt: DateTime {#1599 ▼
}
}
这是我的实体:
<?php
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被访问,但它没有将图像设置为Uploaded File。
我是否使用了错误的目录或错误的访问权限,或者还可能是其他原因?
3条答案
按热度按时间mznpcxlj1#
我也有同样的问题。至少在我这边,这是一个服务器配置的事情。
如果你运行syfmony的服务器,它将像charm php bin/console服务器一样工作:run
如果你运行php服务器,图片将不会显示php -S 127.0.0.1:8000-t public
yyyllmsg2#
public function configureFields(string $pageName):可迭代{ return [
ImageField::new('imageFile ')->setFormType(VichImageType::class)->onlyOnIndex(),
06odsfpq3#
vich_uploader:db_driver:orm