Получите доступ к Liip Imagine bundle из контроллера - назначьте службу переменной (Symfony 4) - PullRequest
0 голосов
/ 10 июня 2019

Вкл. (Symfony 4) Как получить доступ к пакету Liip Imagine из кода PHP? Я нашел решение использовать кэш Liip Imagine, но не могу заставить его работать.Два решения, ни одно из них не работает для меня.У меня нет абсолютно никакой идеи, почему.

Когда я пробую решение вредителя с

$imagineCacheManager = $this->get('liip_imagine.cache.manager');

в моем контроллере, я получаю ServiceNotFoundException

Сервис "liip_imagine.cache.manager"не найден: даже если он существует в контейнере приложения, контейнер внутри «App \ Controller \ MemberController» является меньшим локатором службы, который знает только о «doctrine», «form.factory», «http_kernel», «parameter_bag»,Услуги «request_stack», «router», «security.authorization_checker», «security.csrf.token_manager», «security.token_storage», «serializer», «session» и «twig».Вместо этого попробуйте использовать внедрение зависимостей.

Поэтому я попробовал предложение Алистера Булмана добавить его вручную в класс в service.yaml, но это тоже не сработало.

В моем service.yaml Iиметь

app.imagine_cache_manager:
    class: Liip\ImagineBundle\Imagine\Cache\CacheManager
    arguments: ["@liip_imagine.cache.manager"]

В моем контроллере у меня есть

$imagineCacheManager = $this->get('app.imagine_cache_manager');

, что приводит меня к тому же исключению

Служба "app.imagine_cache_manager" не найдена: дажехотя он существует в контейнере приложения, контейнер внутри «App \ Controller \ MemberController» является меньшим локатором службы, который знает только о «doctrine», «form.factory», «http_kernel», «parameter_bag», «request_stack»,сервисы "router", "security.authorization_checker", "security.csrf.token_manager", "security.token_storage", "serializer", "session" и "twig".Попробуйте вместо этого использовать внедрение зависимостей.

[Кстати, на самом деле я пытаюсь сделать следующее: у меня есть участники, и у каждого участника есть изображение.Создание члена У меня есть загрузка изображения и позвольте Liip создавать измененные изображения основного изображения.Когда я удаляю изображение или элемент, конечно, я также хочу удалить кэшированные изображения с помощью Liip.Вот почему я пытаюсь заставить менеджер кеша Liip получать пути к кэшированным изображениям, чтобы можно было их удалять.Другой подход состоял в том, чтобы иметь прослушиватель событий, но это не сработало и для меня.Я подведу итоги подхода Слушателя в другом вопросе.]

1 Ответ

2 голосов
/ 10 июня 2019

Это связано с устареванием класса Controller как базового класса контроллеров в Symfony4.Рекомендуемый класс AbstractController использует меньший контейнер с только объявленными службами через ServiceSubscriberInterface (вы можете посмотреть в методе AbstractController::getSubscribedServices(), чтобы узнать, какие службы доступны по умолчанию).

Выможет либо:

расширить функцию getSubscribedServices() в вашем контроллере и включить CacheManager в качестве одной из служб.

внедрить службу непосредственно в контроллере (рекомендуется):

namespace App\Controller;

use Liip\ImagineBundle\Imagine\Cache\CacheManager;

class MemberController extends AbstractController 
{
    public function __construct(CacheManager $liipCache)
    {
        $this->imagineCacheManager = $liipCache;
    }
}

Вы можете прочитать об этом изменении в объявлении

...