Symfony 4服务注入参数很少

时间:2019-02-27 17:53:33

标签: dependency-injection symfony4

在我的Symfony 4项目中,我在/src/Blocks/Hello/HelloBlock.php文件中创建了一个HelloBlock类。

这是它的构造函数...

public function __construct(EntityManagerInterface $entityManager)
{
    $this->em = $entityManager;
}

然后在我的services.yaml中添加了此内容...

    App\Blocks\:
        resource: '../src/Blocks'
        tags: ['controller.service_arguments']

在运行我的代码(开发环境,清除缓存等)时,出现“参数过多”错误。它不是在注入依赖关系。

有人可以帮忙吗?我认为这就是Symfony DI应该做的。

谢谢!

1 个答案:

答案 0 :(得分:0)

缺少参数:

您可能必须向服务定义提供arguments:

App\Blocks\:
    resource: '../src/Blocks'
    tags: ['controller.service_arguments']
    arguments:
        - '@doctrine.orm.default_entity_manager'

@用于将名称解释为简单的字符串,而是获取实际的服务。

默认主义命名:

命名有点棘手; this answer使我了解命名的构建方式: (根据doctrine.orm.entity_managers YAML定义),并与_entity_manager串联。

default的特殊情况下,即使未在上述配置键中明确定义,也可以作为doctrine.orm.default_entity_manager使用。

我的假设:

我在我的应用程序上尝试仅将该字符串添加为参数,但没有失败。然后我打错了字,但失败了。因此,我假设default_entity_manager是自动定义的(我不确定在哪里)。


否则:

万一它不起作用,另一个解决方法是验证为什么entityManager没有自动连接。检查您的配置,以自动装配src/文件夹。

App\:
    resource: '../src/*'
    exclude: '../src/{DependencyInjection,Tests, ....}'

并确保Blocks文件夹中未列出exclude