Symfony 4:在助手类中静态获取容器

时间:2018-11-07 07:12:42

标签: symfony activerecord service static containers

我正在为symfony开发一个类似记录的活动系统,但遇到了问题。

我在symfony中有一个辅助类,它不是一种服务,也不希望它成为一种服务。此类具有名为容器的静态属性和用于对其进行设置的静态方法。现在的问题是,何时调用此静态方法来设置容器?

我尝试了bundle扩展,编译器传递,但都没有成功。 (主要是因为它们必须是服务,而当我将其提供为服务并在以后进行扩展时,它将跳过编译器过程。)

让我知道是否有人需要任何进一步的信息,谢谢!

1 个答案:

答案 0 :(得分:-1)

如果要将容器注入到帮助器中,即调用Helper::set($ontainer),则必须在编译后的容器可用时执行此操作。扩展和编译器通过都会在编译之前修改容器,因此可能不是正确的地方,除非您希望将帮助程序作为服务注入到容器中并引用该容器,就像下面的方法概述一样。

您可以在创建容器的内核中或在控制器内部调用Setter方法,该方法在构建容器时加载-在扩展Controller基类时可以访问到容器。我不认为这是一个好主意,因为您永远无法确定何时/是否调用了该方法以及其中有哪个容器。另外,在使用新的AbstractController基类时,您无权访问完整的容器,而只能访问控制器所需的特定服务的服务定位符。

services.yaml内将其配置为服务时,可以使用calls or setter injection通过引用@container来注入容器服务。我也不推荐这样做,但考虑到您的要求,我认为这是两个弊端中较小的一个。