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

时间:2018-09-04 15:56:06

标签: php symfony dependency-injection symfony4

我有一个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创建表单时注入它,但是如果可能的话,我更喜欢这种方式。

1 个答案:

答案 0 :(得分:0)

您必须将要注入的课程告诉您的ManagerAwareType课程。通常的方法是将其放在__construct函数中:

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

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

    // getter and setter...
}