我在玩Symfony2 DependencyInjection。我在yaml中定義了服務,並想在控制器中使用$container->getDefinition($serviceId)
,但得到了InvalidArgumentException。在yaml配置中定義服務時是否可以檢索控制器中的服務定義?如何在yaml config中定義服務時檢索控制器中的服務定義?
//services.yml
services:
patriots:
class: CwBundle\Utils\PatriotsClass
calls:
- [setBrady, ['%brady%']]
broncos:
class: CwBundle\Utils\BroncosClass
arguments: [@patriots]
//controller
$container = new ContainerBuilder() ;
$a = $container->hasDefinition('patriots');
$b = $container->findDefinition('broncos');
$c = $container->getMethodCalls('patriots');
//print_r $a,$b,$c
服務定義 「野馬」 不存在。
我有一種感覺,這整個symfony.com/doc/components/dependency_injection部分是爲那些在PHP定義服務,而不是yaml。
編輯: 混亂的原因是,第一章:「與集裝箱服務定義工作」正章之前的Symfony DI文檔「編譯容器」。
在您的鏈接中:「此處更改服務定義的方法只能在容器編譯之前使用。」Symfony 2編譯您的容器並將其存儲在結果中。您將無法對控制器的定義進行任何操作。看看編譯器通行證:http://symfony.com/doc/current/cookbook/service_container/compiler_passes.html,看看它們是否符合你的要求。但是您將無法基於路線混淆現有的服務定義。 – Cerad
@Cerad謝謝你的回答。我沒有要求,我只是閱讀這個dep-injection - 文檔和「玩」與方法顯示在那裏與yaml配置中定義我的服務。 (但這個「玩」意味着拋出異常)。所以如果服務在yaml中定義,你不能再操縱它了嗎? – Sruj
文檔鏈接通常用於Symfony2的依賴注入,包括所有可用的格式(yml,php,xml) – chalasr