我有一个 symfony 4 项目,它的用户实体与 Avatar 实体有关系(使用 VichUploaderBundle 上传的图像)。
在 Avatar.php 中:
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $imageName;
/**
* NOTE: This is not a mapped field of entity metadata, just a simple property.
*
* @Assert\Image(
* mimeTypes="image/jpeg")
* @Vich\UploadableField(mapping="avatar", fileNameProperty="imageName", size="imageSize")
*
* @var File|null
*/
private $imageFile;
在 User.php 中:
/**
* @ORM\OneToOne(targetEntity="App\Entity\Avatar", mappedBy="user", cascade={"persist", "remove"})
*/
private $avatar;
我有一个个人资料页面来编辑用户的数据(姓名、姓氏、邮件、头像)。在这个页面中,我使用 LiipImagineBundle 在某个维度显示当前头像。
当用户编辑他的个人资料时,我希望听众可以检查头像是否有变化。在这种情况下,它会删除旧的媒体/缓存。
所以我为此创建了一个监听器:
<?php
namespace App\Listener;
use App\Entity\Avatar;
use Doctrine\Common\EventSubscriber;
use Doctrine\ORM\Event\LifecycleEventArgs;
use Doctrine\ORM\Event\PreUpdateEventArgs;
use Liip\ImagineBundle\Imagine\Cache\CacheManager;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Vich\UploaderBundle\Templating\Helper\UploaderHelper;
class ImageCacheSubscriber implements EventSubscriber
{
/**
* CacheManager
*
* @var CacheManager
*/
private $cacheManager;
/**
* UploaderHelper
*
* @var UploaderHelper
*/
private $uploaderHelper;
public function __construct(CacheManager $cacheManager, UploaderHelper $uploaderHelper)
{
$this->cacheManager = $cacheManager;
$this->uploaderHelper = $uploaderHelper;
}
public function getSubscribedEvents()
{
return [
'preRemove',
'preUpdate'
];
}
public function preRemove(LifecycleEventArgs $args)
{
$entity = $args->getEntity();
if (!$entity instanceof Avatar) {
return;
}
$this->cacheManager->remove($this->uploaderHelper->asset($entity, 'imageFile'));
}
心有法竹
qq_笑_17
30秒到达战场
随时随地看视频慕课网APP