2012-01-05 6 views
12

"非オブジェクト上getKernel()" を与える、私はサービスコンテナを取得しようとしましたが<code>configure()</code>機能で

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を呼び出す場合、それは働くことに気づきました。しかし、可能であればgetContainer()configure()に可能性があります。私はaddOptionデフォルト値の引数で使用する設定パラメータを取得したい。

そうでなければ私はABITより非直感的な表示されます

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

を使用することができますか?

+0

私は問題はあなたがそれをやっている方法だと思います。設定値に基づいてオプションを追加することは、非常に良い解決策ではありません。何を達成しようとしていますか? –

+0

私はparameters.iniにデフォルトを設定したいと思っています。アプリケーションとコンソールからアクセス可能なもの。 2番目の考えでは、おそらく私はハードコーディングされたデフォルトで逃げることができました...うーん...私のやり方は間違っていますか? –

+0

申し訳ありませんが、あなたが達成しようとしていることを誤解しました。あなたのやり方に間違いはありません。私は唯一の解決策は、 '' configure() ''でデフォルト値を '' 'false'''に設定し、' '' execute() '' 'で手動で設定することだと思います。 –

答えて

2

サービスコンテナがconfigureに初期化されていません。私はexecuteにアクセスできます。

コンソールオプションのデフォルト値については、私は多くの場合、Symfony2のパラメータ/変数を取得するときにデフォルト値を設定することができます

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

ようなものを使用することができます。だから、上記のソリューションのためのショートカットは、単純に次のようになります。いいえ他の回答theresの場合、私はこれを閉じることができるように


$opt1 = $input->getOption('opt1', $default); 
ちょうど答えとしてこれを置きます。

18

execute()内の$this->container = $this->getApplication()->getKernel()->getContainer();を呼び出します。 を参照してくださいhttps://stackoverflow.com/a/7517803/297679

+0

'$ this-> container'にはプライベートアクセスがありますので、拡張クラスで設定することはできません – JamesHalsall

2

Googleで見つけたすべての情報(このスレッドを含む)にもかかわらず、何も働いていないようです。私は最終的になぜカーネルを手に入れることができなかったのかを理解しました。 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(); 

、アプリケーションを実行します。ドキュメントからの1つのコピーが、私はファイルapplication.phpを作成していますか、 php application.php this:その

これは私にとっては役に立たなかった。なんらかの理由で、これを行うときにカーネルは利用できません。私が使用してアプリケーションを実行するときしかし、それは次のとおりです。

PHPアプリ/コンソールこの:

私の推測では、アプリアプリ/コンソールを実行すると、私のapplication.php、より多くの多くは、このような出発物質として、いないことであることカーネル。私は必要なものだった

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

:すべてが正常に動作し、私が使用することができる午前:「というこのPHPアプリ/コンソール」としてアプリケーションを実行して

関連する問題