从 Controller 访问 Liip Imagine bundle - 将服务分配给变量(Symfony 4)
Access Liip Imagine bundle from Controller - assign service to variable (Symfony 4)
在 上,我找到了使用 Liip Imagine Cache 的解决方案,但我无法让它工作。两种解决方案,它们都不适合我。我完全不知道为什么。
当我使用
尝试 harmstyler 的解决方案时
$imagineCacheManager = $this->get('liip_imagine.cache.manager');
在我的控制器中然后我得到一个 ServiceNotFoundException
Service "liip_imagine.cache.manager" not found: even though it exists in the app's container, the container inside "App\Controller\MemberController" is a smaller service locator that only knows about the "doctrine", "form.factory", "http_kernel", "parameter_bag", "request_stack", "router", "security.authorization_checker", "security.csrf.token_manager", "security.token_storage", "serializer", "session" and "twig" services. Try using dependency injection instead.
所以我尝试了 Alister Bulman 的建议,将其手动注入到 service.yaml 中的 class 中,但这也不起作用。
在我的 service.yaml 我有
app.imagine_cache_manager:
class: Liip\ImagineBundle\Imagine\Cache\CacheManager
arguments: ["@liip_imagine.cache.manager"]
在我的控制器中我有
$imagineCacheManager = $this->get('app.imagine_cache_manager');
这导致我遇到同样的异常
Service "app.imagine_cache_manager" not found: even though it exists in the app's container, the container inside "App\Controller\MemberController" is a smaller service locator that only knows about the "doctrine", "form.factory", "http_kernel", "parameter_bag", "request_stack", "router", "security.authorization_checker", "security.csrf.token_manager", "security.token_storage", "serializer", "session" and "twig" services. Try using dependency injection instead.
[顺便说一句,我实际上想做的是:我有会员,每个会员都有一个形象。创建成员 我有一个图像上传,让 Liip 创建主图像的调整大小的图像。当我删除图片或成员时,当然我也想删除Liip缓存的图片。这就是为什么我尝试让 Liip 缓存管理器能够获取缓存的图像路径以便能够删除它们。另一种方法是使用事件监听器,但这对我也不起作用。我将在另一个问题中总结 Listener 方法。]
这是由于 Controller
class 作为 Symfony4 中控制器的基础 class 弃用所致。
现在推荐的 AbstractController
class 使用较小的容器,其中仅包含通过 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;
}
}
您可以阅读此更改in the announcement
在
当我使用
尝试 harmstyler 的解决方案时$imagineCacheManager = $this->get('liip_imagine.cache.manager');
在我的控制器中然后我得到一个 ServiceNotFoundException
Service "liip_imagine.cache.manager" not found: even though it exists in the app's container, the container inside "App\Controller\MemberController" is a smaller service locator that only knows about the "doctrine", "form.factory", "http_kernel", "parameter_bag", "request_stack", "router", "security.authorization_checker", "security.csrf.token_manager", "security.token_storage", "serializer", "session" and "twig" services. Try using dependency injection instead.
所以我尝试了 Alister Bulman 的建议,将其手动注入到 service.yaml 中的 class 中,但这也不起作用。
在我的 service.yaml 我有
app.imagine_cache_manager:
class: Liip\ImagineBundle\Imagine\Cache\CacheManager
arguments: ["@liip_imagine.cache.manager"]
在我的控制器中我有
$imagineCacheManager = $this->get('app.imagine_cache_manager');
这导致我遇到同样的异常
Service "app.imagine_cache_manager" not found: even though it exists in the app's container, the container inside "App\Controller\MemberController" is a smaller service locator that only knows about the "doctrine", "form.factory", "http_kernel", "parameter_bag", "request_stack", "router", "security.authorization_checker", "security.csrf.token_manager", "security.token_storage", "serializer", "session" and "twig" services. Try using dependency injection instead.
[顺便说一句,我实际上想做的是:我有会员,每个会员都有一个形象。创建成员 我有一个图像上传,让 Liip 创建主图像的调整大小的图像。当我删除图片或成员时,当然我也想删除Liip缓存的图片。这就是为什么我尝试让 Liip 缓存管理器能够获取缓存的图像路径以便能够删除它们。另一种方法是使用事件监听器,但这对我也不起作用。我将在另一个问题中总结 Listener 方法。]
这是由于 Controller
class 作为 Symfony4 中控制器的基础 class 弃用所致。
现在推荐的 AbstractController
class 使用较小的容器,其中仅包含通过 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;
}
}
您可以阅读此更改in the announcement