Php Symfony 4.1-Can和x27;t在自定义表单基类中注入依赖项
我有一个id为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... } 因此,我的第一
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...
}