【发布时间】:2019-05-02 12:38:11
【问题描述】:
我正在将一个大型应用程序升级到 4.2
并且控制器内部的$this->get(".....") 已被弃用,应该使用 AutoWire。
我遇到的问题是我有 2 个服务,它们实际上来自同一个类(只是不同的构造函数参数)。
services.yml
services:
service.a:
class: Namespace\MyClass
arguments: [ "argument1" ]
service.b:
class: Namespace\MyClass
arguments: [ "argument2" ]
控制器:
public function demoAction() {
$serviceA = $this->get("service.a");
$serviceB = $this->get("service.b");
}
以及有问题的结果:
public function demoAction(MyClass $serviceA, MyClass $serviceB) {
}
我们可以使用别名来服务定义,例如:
MyClass: '@service.a'
但我不能使用虚拟/假类,例如(没有现有的):
MyPseudClass: '@service.b'
您如何在自动连线模式下处理此类情况?
我可以创建从基础扩展的“伪”类,只是为了获得不同的类名,但这感觉很奇怪。
【问题讨论】:
-
你有一些很好的答案。我有时使用的一种方法是再创建两个类 MyClassA 和 MyClassB 都从 MyClass 扩展,否则为空。然后你可以输入提示并使用 autowire 来避免任何 services.yaml 条目。
-
是的,我知道,试过了,有效,但最好的代码越少!
标签: symfony autowired symfony4