在我的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应该做的。
谢谢!
答案 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
。