【问题标题】:Symfony 4 Service Injection Too Few ArgumentsSymfony 4 服务注入参数太少
【发布时间】:2019-02-27 17:53:33
【问题描述】:

在我的 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 应该做的。

谢谢!

【问题讨论】:

    标签: dependency-injection symfony4


    【解决方案1】:

    缺少参数:

    您可能必须向服务定义提供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 文件夹中。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-03
    • 1970-01-01
    • 2018-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多