在我的 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/