2015-10-23 37 views
0

我試圖注入一個對象到我的服務之一,以及另一個服務。第二個參數只是一個對象,但是當在services.yml文件中聲明它時,我會收到一個異常,它期待一個對象,但是會給出一個字符串。Symfony服務容器注入字符串不是對象

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%] 

導致:

Catchable Fatal Error: Argument 2 passed to AppBundle\MyClass::__construct() must be an instance of AppBundle\InjectObject, string given

我試過報價,unquoting並採用新的生產線,而不是方括號:

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

回答

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] 
+0

使用多個參數時,這僅僅是這樣嗎?因爲我有一個服務只是使用%class%語法作爲單個參數,並注入對象,而不是字符串 – iswinky

+0

我只有在我的服務中添加了類作爲參數和變量作爲參數字符串。我可能會依賴於你試圖注入的類是否有任何參數本身。如果我稍後獲得時間,我會運行一些測試並找出答案。 – Rooneyl

+0

我試圖注入的類作爲第二個參數沒有任何構造函數參數。猜測你無法按照我嘗試的方式去做。乾杯,無論如何都會起作用 – iswinky