2015-02-07 62 views
3

我在嘗試使用Symfony2的Console組件創建一個命令時遇到了問題,完整的Symfony堆棧應用程序。symfony2 CLI [Symfony Component Debug Exception ContextErrorException]

如果我嘗試通過我的服務,通過DI,該命令將引發以下錯誤,當我嘗試運行它:如果我創建ContainerAwareCommand命令

[Symfony\Component\Debug\Exception\ContextErrorException] 
Notice: Trying to get property of non-object 

,並試圖讓我的服務與

$ this-> getContainer() - > get('mtgu.api.card.list.response.data');

我得到

[LogicException]                
    The container cannot be retrieved as the application instance is not yet set. 

我的服務也在躍躍欲試地被加載,其在前端控制器使用。這個問題變得陌生,就像我通過一個存儲庫服務 - 我沒有遇到這個問題!

是否有一些技巧可以通過這種方式建立一個可以通過的服務?或者我弄亂了我的配置?

通過在DI擴展中執行此操作,我「自動加載」了所有服務,而不是通過主要services.yml包含它們。我認爲這或yml的排序包括可能影響它 - 但我已嘗試手動包括一切,但仍然沒有喜悅!

$finder = new Finder(); 
$finder->name('services.yml'); 
/** 
* @var $file SplFileInfo 
*/ 
foreach($finder->in(__DIR__.'/../') as $file) { 
$loader = new Loader\YamlFileLoader($container, new FileLocator($file->getPath())); 
$loader->load('services.yml'); 
} 

供應商/包/命令/ services.yml

services: 

mtgu.command.slugify: 
    class: MightyStudios\MtguBundle\Command\SlugifyCommand 
    tags: 
     - { name: console.command } 
    arguments: 
     - @mtgu.api.card.list.response.data 

我想,這也許只是一些配置問題,但谷歌已經講不出話來找到答案!有沒有人遇到這個問題,他們可以擺脫任何光線!?

非常感謝

回答

3

一個更好的結構將是把你的服務文件在Resources/config目錄您的綁定(參見所有核心包)。但是,這是一方面。

該問題由異常來描述:由於應用程序實例尚未設置,因此無法檢索容器。$this->applicationnull時拋出ContainerAwareCommand#getContainer()方法。該應用程序設置在Application#add()方法的第一行。

這意味着您在將命令添加到應用程序之前調用$this->getContainer()。也許你在構造函數中使用它?

如果是這樣,請將其取出並僅使用Command#execute()Command#interact()Command#initialize()中的容器。

+0

是的,如果我在使用ContainerAwareCommand時在構造函數中使用它,它會拋出它。但我想DI服務 - 所以擴展命令。那就是它拋出第一個無對象異常的時候。 – OnIIcE 2015-02-07 11:03:41

+0

我試着再次創建命令擴展ContainerAwareCommand - 並在所有你說的地方使用getContainer,但我仍然得到一個 [Symfony \ Component \ Debug \ Exception \ ContextErrorException] 注意:試圖獲取non-對象 錯誤=( – OnIIcE 2015-02-07 19:20:17

相關問題