Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何自动连接Symfony缓存池服务?_Symfony_Autowired - Fatal编程技术网

如何自动连接Symfony缓存池服务?

如何自动连接Symfony缓存池服务?,symfony,autowired,Symfony,Autowired,在Symfony 4和5中,我们有缓存池的概念。当我们定义新的缓存池时,将使用池的名称为其生成一个新的服务。问题是,由于它们都共享同一个CacheInterface,如果我们仅依赖该接口,Symfony将不知道要注入哪个服务 我的问题是如何在上述情况下使用autowire,将特定缓存池服务自动连接到另一个服务 (我可以手动注入缓存池,但如果可以,我不想这样做)。我为回答自己的问题感到难过,但我确实希望其他人能从中受益: 定义池时,Symfony将自动为您创建自动关联别名,因此您可以使用以下内容:

在Symfony 4和5中,我们有缓存池的概念。当我们定义新的缓存池时,将使用池的名称为其生成一个新的服务。问题是,由于它们都共享同一个CacheInterface,如果我们仅依赖该接口,Symfony将不知道要注入哪个服务

我的问题是如何在上述情况下使用autowire,将特定缓存池服务自动连接到另一个服务


(我可以手动注入缓存池,但如果可以,我不想这样做)。

我为回答自己的问题感到难过,但我确实希望其他人能从中受益:

定义池时,Symfony将自动为您创建自动关联别名,因此您可以使用以下内容:

Symfony\Contracts\Cache\CacheInterface$yourPoolName和Symfony将知道使用哪个池。请注意,参数名将是池的真实名称的camelCase版本


您可以通过运行命令debug:autowiring查看此列表进行检查。

假设您是autowire代码。当面对同一缓存接口的多个实现时,您将使用什么标准自动选择一个?如果你真的能清楚地表达这些标准,那么编译器的一个过程可能会起作用。我找到了这个链接:。似乎我可以使用变量名来建议,所以我需要定义“别名”,例如App\Util\TransformerInterface$shoutyTransformer:“@App\Util\uppercasetranformer”。我将检查我是否必须自己这样做,或者Symfony是否已经这样做了(更可能不是)好的,你知道吗,别名实际上是自动生成的(可以通过运行命令debug:autowiring来检查)。我觉得这应该在他们的文件中提到。有时我觉得Symfony的速度太快了,他们没有时间做适当的文档,我们必须深入研究代码。这是我第一次看到可以将参数名称用作别名的一部分。将参数名称映射到服务不是很舒服,但很高兴知道这是可以做到的。我可以想象新版本最终会允许像#[CachePool=name]这样的东西直接出现在构造函数中。@Cerad我同意你的观点,老实说,我不太喜欢它。我认为他们将来应该用属性来解决这个问题。例如,Symfony在处理多个实现接口时,能够将参数名称“绑定”到服务。可以对services.yml中的任何服务进行此配置