Symfony 4.1 - 无法在自定义表单基类中注入依赖项



我有一个 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"]]

但是当我在控制器中创建表单时$managerProvidernull.然后我尝试在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...
}

最新更新