首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Symfony 4容器数组服务参数

Symfony 4容器数组服务参数
EN

Stack Overflow用户
提问于 2018-02-21 21:08:01
回答 1查看 4.3K关注 0票数 0

在文件service.yaml中,我有:

代码语言:javascript
复制
parameters:
  security.allows.ip:
    - '127.0.0.1'
    - '127.0.0.2'

或者:

代码语言:javascript
复制
parameters:
  security.allows.ip: ['127.0.0.1', '127.0.0.2']

和DI的配置:

代码语言:javascript
复制
services:
  _defaults:
    autowire: true
    autoconfigure: true
    public: false

我想为类配置服务:

代码语言:javascript
复制
security.class:
    class: App\Class
    arguments:
      - '%security.allows.ip%'

最后我有话要说:

无法自动更新服务"App\Class":方法"__construct()“的参数”__construct“必须具有类型提示或显式地给出值。

构造函数的定义是:

代码语言:javascript
复制
 public function __construct(array $securityConfiguration)

你能帮我一下吗?在symfony 2.8中,它可以工作,但是对于这个配置,我有这样的错误。类型提示字符串的其他服务是可以的,但对于这个类则不行。如果我添加容器接口来构造这个类,并通过->getParameter('security.allows.ip')获取参数,它就能工作。为什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-21 21:34:19

为了使自动导航系统工作,该类型需要匹配一个服务id。这里的问题是,您有另一个类,您正在尝试将您的名称相当糟糕的App\Class注入其中。

代码语言:javascript
复制
class SomeOtherClass {
    public function __construct(App\Class $appClass)

当您创建AppClass服务时,您为它提供了一个security.class id。因此,autowire查找App\Class的服务id,没有找到它,然后尝试创建一个。当然,它也不能自动形成一个阵列。

解决这一问题的一种方法是使用别名:

代码语言:javascript
复制
security.class:
    class: App\Class
    arguments:
        - '%security.allows.ip%'

App\Class: '@security.class'

第二种(推荐的)方法是完全取消security.class id。

代码语言:javascript
复制
App\Class:
    arguments:
        - '%security.allows.ip%'

如果你真的想成为一个酷小子,你甚至可以删除参数关键字。

代码语言:javascript
复制
App\Class:
    $securityConfiguration: '%security.allows.ip%'
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48915494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档