Kar*_*rim 1 php dependency-injection liipimaginebundle symfony4
在(Symfony 4) 如何从 PHP 代码中访问 Liip Imagine 包?我找到了一个使用 Liip Imagine Cache 的解决方案,但我无法让它工作。两种解决方案,它们都不适合我。我完全不知道为什么。
当我尝试使用harmstyler的解决方案时
$imagineCacheManager = $this->get('liip_imagine.cache.manager');
Run Code Online (Sandbox Code Playgroud)
在我的控制器然后我得到一个 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”服务。尝试改用依赖注入。
所以我尝试了 Alister Bulman 的建议,将它手动注入到 service.yaml 中的一个类中,但这也不起作用。
在我的 service.yaml 我有
app.imagine_cache_manager:
class: Liip\ImagineBundle\Imagine\Cache\CacheManager
arguments: ["@liip_imagine.cache.manager"]
Run Code Online (Sandbox Code Playgroud)
在我的控制器中,我有
$imagineCacheManager = $this->get('app.imagine_cache_manager');
Run Code Online (Sandbox Code Playgroud)
这导致我遇到相同的异常
找不到服务“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 缓存管理器能够获取缓存的图像路径以便能够删除它们。另一种方法是有一个事件监听器,但这对我来说也不起作用。我将在另一个问题中总结 Listener 方法。]
这是由于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;
}
}
Run Code Online (Sandbox Code Playgroud)