在(Symfony 4) How do I access the Liip Imagine bundle from within PHP code?上,我找到了一个使用Liip Imagine Cache的解决方案,但无法正常工作。两种解决方案,都不适合我。我完全不知道为什么。
当我尝试使用harmstyler的解决方案时
$imagineCacheManager = $this->get('liip_imagine.cache.manager');
在我的控制器中,然后收到ServiceNotFoundException
服务“ liip_imagine.cache.manager”未找到:即使它存在于应用程序的容器中,“ App \ Controller \ MemberController”内部的容器也是一个较小的服务定位器,仅了解“教义”,“表单”。 factory”,“ http_kernel”,“ parameter_bag”,“ request_stack”,“ router”,“ security.authorization_checker”,“ security.csrf.token_manager”,“ security.token_storage”,“ serializer”,“ session”和“ twig”服务。尝试改用依赖项注入。
所以我尝试了Alister Bulman的建议,将其手动注入到service.yaml中的类中,但这也不起作用。
在我的service.yaml中,
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缓存管理器能够获取缓存的图像路径以将其删除。另一种方法是使用事件监听器,但这对我来说都不起作用。我将在另一个问题中总结监听器方法。]
答案 0 :(得分:2)
这是由于弃用Controller
类作为Symfony4中控制器的基类。
现在推荐的AbstractController
类使用较小的容器,仅通过ServiceSubscriberInterface
声明了服务(您可以在AbstractController::getSubscribedServices()
方法中查看默认情况下可用的服务)。 / p>
您可以:
在Controller中扩展getSubscribedServices()
函数,并将CacheManager
作为服务之一。
直接在控制器中注入服务(推荐):
namespace App\Controller;
use Liip\ImagineBundle\Imagine\Cache\CacheManager;
class MemberController extends AbstractController
{
public function __construct(CacheManager $liipCache)
{
$this->imagineCacheManager = $liipCache;
}
}
您可以了解有关此更改in the announcement