Проверьте, существует ли файл в кэше, прежде чем удалять его с помощью Liip Imagine Bundle (и Symfony3)

Кажется очень простым: я хочу проверить, существует ли файл в кеше Liip Imagine Bundle, прежде чем удалять его. Пример: после обновления фотографии весь кэш был удален, были восстановлены только некоторые миниатюры (например, 175px, но не 250px), и я хочу удалить соответствующую фотографию.
Я использую слушателя, чтобы сделать это в Symfony, как я видел, как это делают другие. Вот как это выглядит:

<?php
namespace AppBundle\EventListener;

use Doctrine\ORM\Event\LifecycleEventArgs;
use AppBundle\Entity\Photo;
use Symfony\Component\HttpFoundation\RequestStack;

/**
* Description of CachePhotoListener
*
* @author Norman
*/
class CachePhotoListener
{
protected $cacheManager;
protected $request;

public function __construct($cacheManager, RequestStack $request_stack)
{
$this->cacheManager = $cacheManager;
$this->request = $request_stack->getCurrentRequest();
}

public function postUpdate(LifecycleEventArgs $args)
{
$entity = $args->getEntity();

if ($entity instanceof Photo) {
$this->cacheManager->remove($entity->userPath());
}
}

// Case : remove photo
public function preRemove(LifecycleEventArgs $args)
{
$entity = $args->getEntity();

$filters = array('thumb_prospect_250', 'thumb_prospect_175');

foreach($filters as $filter){
if ($entity instanceof Photo) {
$expectedCachePath = $this->cacheManager->getBrowserPath($entity->getPath(), $filter);

if (file_exists($expectedCachePath)) {
$this->cacheManager->resolve($this->request, $entity->getPath(), $filter);
$this->cacheManager->remove($entity->getPath());
}
}
}
}

Проблема: file_exists всегда возвращает «false», даже когда миниатюра существует. Вот пример переменной $pectedCachePath:

'http://dev.playermanager/media/cache/thumb_prospect_250/uploads/photos/11/4d176797ca5c7dd753b23ca17b77630eeff0ba8d.jpg' (length=118)

boolean false

'http://dev.playermanager/media/cache/thumb_prospect_175/uploads/photos/11/4d176797ca5c7dd753b23ca17b77630eeff0ba8d.jpg' (length=118)

boolean false

Что я делаю неправильно ? (Я также пытался проверить файлы с помощью is_readable и получить те же результаты)

1

Решение

Хорошо, мне удалось решить мою проблему. Я изменил две вещи.
Сначала я проверил наличие фотографии в кеше Liip методом isStored. Во-вторых, произошла ошибка в моих параметрах cacheManager-> resolve, параметр $ this-> request не должен был быть там.

Что дает мне следующую функцию preRemove в слушателе:

public function preRemove(LifecycleEventArgs $args)
{
$entity = $args->getEntity();

$filters = array('thumb_prospect_250', 'thumb_prospect_175');

foreach($filters as $filter){
if ($entity instanceof Photo) {
$cacheExists = $this->cacheManager->isStored($entity->getPath(), $filter);

if ($cacheExists) {
$this->cacheManager->resolve($entity->getPath(), $filter);
$this->cacheManager->remove($entity->getPath());
}
}
}
}
1

Другие решения

Думаю звонить $this->cacheManager->getBrowserPath возвращает URL пока вы хотите путь к каталогу.

Что вы храните в $entity->getPath()? Может быть, вы можете проверить, существует ли файл в "%kernel.cache_dir%" каталог себя.

0

По вопросам рекламы [email protected]