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