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

问题描述 投票:2回答:1

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

但是当我在Controller中创建表单时$managerProvidernull。然后我尝试在DependencyInjection\Extension类中以编程方式执行相同的操作,代码正在执行而没有任何错误(使用调试器检查):

$managerAwareType = new Definition(ManagerAwareType::class);
$managerAwareType->addTag('form.type');
$managerAwareType->addMethodCall('setManagerProvider', [new Definition('manager_provider')]);
$container->addDefinitions([$managerAwareType]); 

但是它再次没有用,依赖性没有被注入。

我究竟做错了什么?

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

php symfony dependency-injection symfony4
1个回答
0
投票

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

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

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

    // getter and setter...
}
© www.soinside.com 2019 - 2024. All rights reserved.