dependency-injection - Symfony 4 服务注入(inject)参数太少

标签 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']

在运行我的代码时(开发环境、清除缓存等),我收到“参数太少”错误。它没有注入(inject)依赖项。

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

谢谢!

最佳答案

缺少参数:

您可能必须向服务定义提供参数

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

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

默认 Doctrine 命名:

命名有点棘手; this answer让我明白了命名是如何构建的:(根据 doctrine.orm.entity_managers YAML 定义)连接到 _entity_manager

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

我的假设:

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


否则:

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

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

并确保 Blocks 未列在 exclude 文件夹中。

关于dependency-injection - Symfony 4 服务注入(inject)参数太少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54911647/

相关文章:

spring-boot - Spring Boot - 从 YAML 文件注入(inject)映射

dependency-injection - 如何在 TYPO3 Extbase 扩展中包含或自动加载外部库? + 依赖注入(inject)?

symfony - 在 Symfony 中意外的标记 "operator"值 "="("end of print statement"预期)

symfony - 分块上传验证: "The file could not be uploaded."

production-environment - Symfony 4 部署不起作用

java - Restful WS 中的依赖注入(inject)

android - View 模型中不允许字段注入(inject)吗?

javascript - 将 angularjs 应用程序拆分为具有路由依赖项注入(inject)的组件

symfony - 使用 Symfony 4 命令加载不同的 .env 文件

symfony - 多文件验证 : "This value should be of type string"