On (Symfony 4) 如何从PHP代码中访问Liip Imagine bundle?我找到了使用Liip Imagine Cache的解决方案,但我无法让它工作。两种解决方案,都不适合我。我完全不知道为什么。
当我尝试使用harmstyler的解决方案时
$imagineCacheManager = $this->get('liip_imagine.cache.manager');
在我的控制器中,然后我得到一个ServiceNotFoundException。
未找到服务"liip_imagine.cache.manager":即使它存在于应用程序的容器中,"App\Controller\MemberController"中的容器也是一个较小的服务定位器,它只知道"原则"、"form.factory"、"http_kernel"、"parameter_bag"、"request_stack"、"路由器"、"security.authorization_checker"、"security.csrf.token_manager"、"security.token_storage"、"序列化程序"、"会话"和"twig"服务。请尝试改用依赖关系注入。
所以我尝试了Alister Bulman的建议,将其手动注入service.yaml中的一个类中,但这也不起作用。
在我的服务中,我有
app.imagine_cache_manager:
class: LiipImagineBundleImagineCacheCacheManager
arguments: ["@liip_imagine.cache.manager"]
在我的控制器中,我有
$imagineCacheManager = $this->get('app.imagine_cache_manager');
这导致我遇到同样的例外
未找到服务"app.imagine_cache_manager":即使它存在于应用程序的容器中,"App\Controller\MemberController"中的容器也是一个较小的服务定位器,它只知道"学说"、"form.factory"、"http_kernel"、"parameter_bag"、"request_stack"、"路由器"、"security.authorization_checker"、"security.csrf.token_manager"、"security.token_storage"、"序列化程序"、"会话"和"twig"服务。请尝试改用依赖关系注入。
[顺便说一句,我实际上想做的是:我有成员,每个成员都有一个形象。创建成员我有一个图像上传,并让Liip创建主图像的大小调整图像。当我删除图像或成员时,我当然也想删除Liip缓存的图像。这就是为什么我尝试让 Liip 缓存管理器能够获取缓存的图像路径以便能够删除它们的原因。另一种方法是有一个事件侦听器,但这对我也不起作用。我将在另一个问题中总结听众方法。
这是由于在Symfony4中弃用了Controller
类作为控制器的基类。 现在推荐的AbstractController
类使用较小的容器,其中只有通过ServiceSubscriberInterface
声明的服务(您可以查看AbstractController::getSubscribedServices()
方法以查看默认情况下可用的服务)。
您可以:
扩展控制器中的getSubscribedServices()
功能,并将CacheManager
作为服务之一包含在内。
直接在控制器中注入服务(推荐):
namespace AppController;
use LiipImagineBundleImagineCacheCacheManager;
class MemberController extends AbstractController
{
public function __construct(CacheManager $liipCache)
{
$this->imagineCacheManager = $liipCache;
}
}
您可以在公告中阅读有关此更改的信息