我有一个 id 为manager_provider
的服务,我想创建一个名为ManagerAwareType
的基窗体类,并注入此服务。因此,所有扩展此表单类的表单类都可以访问manager_provider
:
abstract class ManagerAwareType extends AbstractType
{
/** @var ManagerProvider */
private $managerProvider;
// getter and setter...
}
所以我的第一次尝试是在services.yaml
中使用_instanceof
声明这一点:
_instanceof:
MyBundleFormManagerAwareType:
tags: [form.type]
calls:
- [setManagerProvider, ["@manager_provider"]]
但是当我在控制器中创建表单时$managerProvider
null
.然后我尝试在DependencyInjectionExtension
类中以编程方式执行相同的操作,并且代码正在执行而没有任何错误(使用调试器检查(:
$managerAwareType = new Definition(ManagerAwareType::class);
$managerAwareType->addTag('form.type');
$managerAwareType->addMethodCall('setManagerProvider', [new Definition('manager_provider')]);
$container->addDefinitions([$managerAwareType]);
但它再次不起作用,没有注入依赖项。
我做错了什么?
PS:我知道我可以将我的依赖项声明为表单选项,并在每次通过控制器创建表单时注入它,但如果可能的话,我更喜欢这种方式。
你必须告诉你的ManagerAwareType
类你想注入的类。通常的方法是将其放在__construct函数中:
abstract class ManagerAwareType extends AbstractType
{
/** @var ManagerProvider */
private $managerProvider;
public function __construct(ManagerProvider $mp)
{
$this->managerProvider = $mp
}
// getter and setter...
}