【问题标题】:Symfony service container injecting string not objectSymfony服务容器注入字符串不是对象
【发布时间】:2015-10-23 10:35:30
【问题描述】:

我正在尝试将一个对象注入我的一个服务以及另一个服务。第二个参数只是一个对象,但是在 services.yml 文件中声明它时,我收到一个异常,表明它需要一个对象,但给出了一个字符串。

services.yml

parameters:
    app.my_class.class: AppBundle\MyClass
    app.object_to_inject.class: AppBundle\InjectObject

services:
    app.my_service:
        class: %app.my_class.class%
        arguments: [@app.another_service, %app.object_to_inject.class%]

结果:

可捕获的致命错误:参数 2 传递给 AppBundle\MyClass::__construct() 必须是一个实例 AppBundle\InjectObject 的,给定的字符串

我尝试过引用、取消引用和使用新行而不是方括号:

arguments
    - @app.another_service
    - %app.object_to_inject.class%

【问题讨论】:

    标签: symfony yaml


    【解决方案1】:

    参数只是字符串,因此您尝试注入类名的字符串,而不是实际的类。
    您需要将 AppBundle\InjectObject 定义为服务,然后将其注入。

    例子:

    parameters:
        app.my_class.class: AppBundle\MyClass
        app.object_to_inject.class: AppBundle\InjectObject
    
    services:
        app.my_object:
            class: "%app.object_to_inject.class%"
        app.my_service:
            class: %app.my_class.class%
            arguments: [@app.another_service, @app.my_object]
    

    【讨论】:

    • 只有在使用多个参数时才会出现这种情况吗?因为我有一个服务只是使用 %class% 语法作为单个参数并且注入对象,而不是字符串
    • 我只在我的服务中添加了类作为参数和变量作为参数字符串。我可能取决于您尝试注入的类本身是否有任何参数。如果以后有时间,我会进行一些测试并找出答案。
    • 我试图作为第二个参数注入的类没有任何构造函数参数。猜你就是不能像我尝试的那样做。干杯,这无论如何都有效
    • 只是想指出,对于 Symfony 3.0,不鼓励使用参数来保存类名的做法。一切仍然有效,但如果更改类是常见的,你真的应该只使用参数类名称。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多