2012-01-05 109 views
12

configure()功能 「非對象getKernel()」,我試圖讓服務容器獲取服務容器中的Symfony 2控制檯命令給

class SetQuotaCommand extends ContainerAwareCommand { 

    protected function configure() { 
     parent::configure(); 
     die(get_class($this->getContainer())); 

PHP Fatal error: Call to a member function getKernel() on a non-object in ...\Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand.php on line 37

我需要做一些不同的事情嗎?

UPDATE

我注意到,它的作品,如果我在​​打電話getContainer。但我不知道它是否可以在configure()getContainer()。我想獲得一個配置參數,用於addOption默認值參數。

否則我可以用

$param1 = $input->getOption('param1') ? : $container->getParameter('param1'); 

出現升技更多的非直觀?

+0

我認爲問題在於你如何去做。基於配置值添加選項不是一個很好的解決方案。你到底想要達到什麼目標? – 2012-01-05 10:19:21

+0

我想在parameters.ini中設置默認值。可通過應用程序和控制檯訪問的內容雖然在第二個想法,也許我可以逃脫硬編碼默認...嗯...我的做法雖然有什麼錯嗎? – 2012-01-05 14:24:57

+0

對不起,我誤解了你想要達到的目標。你的做法沒有任何問題。我認爲唯一的解決方案可能是在'''configure()''''中將默認值設置爲'''''',然後在'''execute()'''中手動設置。 – 2012-01-08 17:59:58

回答

2

看來服務容器尚未在configure中初始化。我可以在execute中訪問它。

至於默認設置控制檯選項,我可以使用類似

$opt1 = $input->getOption('opt1') ? : $default; 

在許多情況下,Symfony2中,您可以設置默認值檢索參數/變量時。因此,對於上述方案中的快捷方式,簡直是:

$opt1 = $input->getOption('opt1', $default); 

只是把這個作爲一個答案,所以我可以,如果世界上沒有其他的答案關閉此。

2

儘管我在Google上發現的所有信息(包括此線程)都沒有任何效果。我終於明白爲什麼我無法獲得內核。

在1:從文檔1個拷貝,我創建一個文件application.php:

#!/usr/bin/env php 
<?php 
// application.php 

require __DIR__.'/vendor/autoload.php'; 
require __DIR__.'/app/AppKernel.php'; 

use X\SnmpBundle\Command\GreetCommand; 
use Symfony\Component\Console\Application; 

$application = new Application(); 
$application->add(new GreetCommand()); 
$application->run(); 

然後執行該應用程序通過運行:

./application.php這樣的:或php application.php這個:

這對我沒有用。出於某種原因,內核在執行此操作時不可用。但是,當我運行使用的應用程序:

PHP應用程序/控制檯這樣的:

我的猜測是,正在運行的應用程序/控制檯可以做更多然後我application.php確實,如啓動核心。

隨着運行的應用程序的「PHP應用程序/控制檯這樣的:」一切工作正常,我可以使用:

$this->getContainer()->get('doctrine')->getManager(); 

這是我需要的。