问题描述
在中(Symfony 4)如何从PHP代码中访问Liip Imagine捆绑包?我找到了使用Liip Imagine Cache的解决方案,但无法正常工作.两种解决方案,都不适合我.我完全不知道为什么.
On (Symfony 4) How do I access the Liip Imagine bundle from within PHP code? I found a solution to use the Liip Imagine Cache but I can't get it to work. Two solutions, neither of them work for me. I have absolutely no Idea why.
当我尝试使用harmstyler的解决方案时
When I try harmstyler's solution with
$imagineCacheManager = $this->get('liip_imagine.cache.manager');
在我的控制器中,然后收到ServiceNotFoundException
in my Controller then I get a ServiceNotFoundException
所以我尝试了Alister Bulman的建议,将其手动注入到service.yaml中的类中,但这也不起作用.
So I tried Alister Bulman's suggestion to inject it manually into a class in the service.yaml but that doesn't work either.
在我的service.yaml中,
In my service.yaml I have
app.imagine_cache_manager:
class: Liip\ImagineBundle\Imagine\Cache\CacheManager
arguments: ["@liip_imagine.cache.manager"]
在我的控制器中,
$imagineCacheManager = $this->get('app.imagine_cache_manager');
这导致我遇到相同的异常
which leads me to the same Exception
[顺便说一句,我实际上想做的是:我有成员,每个成员都有一张图像.创建成员我有一个图像上传,让Liip创建主图像的调整大小图像.当我删除图像或成员时,我当然也想通过Liip删除缓存的图像.这就是为什么我尝试让Liip缓存管理器能够获取缓存的图像路径以将其删除.另一种方法是使用事件监听器,但这对我来说都不起作用.我将在另一个问题中总结监听器方法.]
推荐答案
这是由于不赞成将 Controller
类用作Symfony4中的控制器基类.现在推荐的 AbstractController
类使用一个较小的容器,该容器仅通过 ServiceSubscriberInterface
声明了服务(您可以查看 AbstractController :: getSubscribedServices()
方法以查看默认情况下可用的服务.
This is due to the deprecation of the Controller
class as the base class of controllers in Symfony4.The now recommended AbstractController
class uses a smaller container with only the declared services via the ServiceSubscriberInterface
(you can take a look in the AbstractController::getSubscribedServices()
method to see what services are available by default).
您可以:
在Controller中扩展 getSubscribedServices()
函数,并将 CacheManager
作为服务之一.
Extend the getSubscribedServices()
function in your Controller and include the CacheManager
as one of the services.
直接在控制器中注入服务(推荐):
Inject the service directly in your controller (recommended):
namespace App\Controller;
use Liip\ImagineBundle\Imagine\Cache\CacheManager;
class MemberController extends AbstractController
{
public function __construct(CacheManager $liipCache)
{
$this->imagineCacheManager = $liipCache;
}
}
您可以阅读有关此更改的信息在公告中
You can read about this change in the announcement
这篇关于从Controller访问Liip Imagine捆绑包-将服务分配给变量(Symfony 4)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!