Php Symfony 4.1-Can和x27;t在自定义表单基类中注入依赖项

Php Symfony 4.1-Can和x27;t在自定义表单基类中注入依赖项,php,symfony,dependency-injection,symfony4,Php,Symfony,Dependency Injection,Symfony4,我有一个id为manager\u provider的服务,我想用这个服务创建一个名为ManagerAwareType的基本表单类。因此,所有扩展该类的表单类都可以访问管理器\u提供程序: abstract class ManagerAwareType extends AbstractType { /** @var ManagerProvider */ private $managerProvider; // getter and setter... } 因此,我的第一

我有一个id为
manager\u provider
的服务,我想用这个服务创建一个名为
ManagerAwareType
的基本表单类。因此,所有扩展该类的表单类都可以访问
管理器\u提供程序

abstract class ManagerAwareType extends AbstractType
{
    /** @var ManagerProvider */
    private $managerProvider;

    // getter and setter...
}
因此,我的第一次尝试是使用
服务中的
\u instanceof
来声明它。yaml

_instanceof:
    MyBundle\Form\ManagerAwareType:
      tags: [form.type]
      calls:
        - [setManagerProvider, ["@manager_provider"]]
但是当我在Controller
中创建表单时,$managerProvider
null
。然后我尝试在
DependencyInjection\Extension
类中以编程方式执行相同的操作,代码执行时没有任何错误(通过调试器检查):

但是,它同样不起作用,依赖性没有被注入

我做错了什么


注:我知道我可以将依赖项声明为表单选项,并在每次通过控制器创建表单时注入它,但如果可能的话,我更喜欢这种方式。

您必须实际告诉您的
ManagerAwareType
类您想要注入的类。通常的方法是将其放入_构造函数中:

abstract class ManagerAwareType extends AbstractType
{
    /** @var ManagerProvider */
    private $managerProvider;

    public function __construct(ManagerProvider $mp)
    {
        $this->managerProvider = $mp
    }

    // getter and setter...
}

不是肯定的,但您可能需要使用容器的父功能:
abstract class ManagerAwareType extends AbstractType
{
    /** @var ManagerProvider */
    private $managerProvider;

    public function __construct(ManagerProvider $mp)
    {
        $this->managerProvider = $mp
    }

    // getter and setter...
}