Я использую vichupload для загрузки своих изображений, и это работает. Теперь, когда я хочу использовать записанные изображения, у меня есть только имя изображения, которое появляется в профиле, а не фотография.Я использую сущность Media и Medecin с отношением OneToOne между Вот сущность Media:
<?php
namespace Doctix\MedecinBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\HttpFoundation\File\File;
use Vich\UploaderBundle\Mapping\Annotation as Vich;
/**
* Media
*
* @ORM\Table(name="media")
*
@Vich\Uploadable
*/
class Media
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
// ... other fields
/**
* NOTE: This is not a mapped field of entity metadata, just a simple property.
*
* @Vich\UploadableField(mapping="media_image", fileNameProperty="imageName", size="imageSize")
*
* @var File
*/
private $imageFile;
/**
* @ORM\Column(type="string", length=255)
*
* @var string
*/
private $imageName;
/**
* @ORM\Column(type="integer")
*
* @var integer
*/
private $imageSize;
/**
* @ORM\Column(type="datetime")
*
* @var \DateTime
*/
private $updatedAt;
public function getId()
{
return $this->id;
}
/**
* If manually uploading a file (i.e. not using Symfony Form) ensure an instance
* of 'UploadedFile' is injected into this setter to trigger the update. If this
* bundle's configuration parameter 'inject_on_load' is set to 'true' this setter
* must be able to accept an instance of 'File' as the bundle will inject one here
* during Doctrine hydration.
*
* @param File|\Symfony\Component\HttpFoundation\File\UploadedFile $image
*/
public function setImageFile(File $image = null)
{
$this->imageFile = $image;
if (null !== $image) {
// 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 \DateTimeImmutable();
}
}
public function getImageFile()
{
return $this->imageFile;
}
public function setImageName(string $imageName)
{
$this->imageName = $imageName;
}
public function getImageName()
{
return $this->imageName;
}
public function setImageSize(int $imageSize)
{
$this->imageSize = $imageSize;
}
public function getImageSize(): int
{
return $this->imageSize;
}
}
Здесь та часть, где сущность Media имеет отношение OneToOne с сущностью Medecin:
/**
* @ORM\OneToOne(targetEntity="Doctix\MedecinBundle\Entity\Media", cascade={"persist","remove","refresh"})
* @ORM\JoinColumn(nullable=true)
*/
private $media;
И мой вид, где я вызываю изображение:
<figure>
<a href="#"><img src="{{ vich_uploader_asset(medecin.media, 'imageFile') }}" alt="{{ medecin.media.imagename }}"> </a>
</figure>
Вот мой конфиг vich_uploader:
vich_uploader:
db_driver: orm
mappings:
media_image:
uri_prefix: /images/medias
upload_destination: '%%kernel.project_dir%/public/images/medias'
inject_on_load: false
delete_on_update: true
delete_on_remove: true
Спасибо