在文件service.yaml我有:
parameters:
security.allows.ip:
- '127.0.0.1'
- '127.0.0.2'
要么:
parameters:
security.allows.ip: ['127.0.0.1', '127.0.0.2']
DI的配置:
services:
_defaults:
autowire: true
autoconfigure: true
public: false
我想为课程配置服务:
security.class:
class: App\Class
arguments:
- '%security.allows.ip%'
最后我有消息:
无法自动装配服务“App \ Class”:方法“__construct()”的参数“$ securityConfiguration”必须具有类型提示或显式赋予值 .
构造函数定义是:
public function __construct(array $securityConfiguration)
你能帮帮我吗?在symfony 2.8中它可以工作,但对于这种配置,我有这个错误 . 类型提示字符串的其他服务是可以的,但不适用于此类 . 如果我为这个类添加容器接口并通过 - > getParameter('security.allows.ip')获取参数,它就可以了 . 为什么?
1 回答
为了使autowire工作,typehint需要匹配服务id . 这里的问题是你有另一个类,你试图注入你的名称相当差的App \ Class
当您创建AppClass服务时,您为其提供了security.class的id . 因此,autowire会查找App \ Class的服务ID,但找不到它,然后尝试创建一个 . 当然它不能自动装配阵列 .
解决此问题的一种方法是使用别名:
第二种(推荐的)方法是完全取消security.class id
如果你真的想成为街区的酷孩子,你甚至可以删除arguments关键字 .