configure()
関数で、サービスコンテナを取得しようとしました
_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
何か違うことをする必要がありますか?
[〜#〜]更新[〜#〜]
execute()
でgetContainer
を呼び出すと機能することに気づきました。しかし、getContainer()
でconfigure()
を実行できるかどうか疑問に思います。 addOption
デフォルト値引数で使用する構成パラメーターを取得したい。
そうでなければ私は使うことができます
_$param1 = $input->getOption('param1') ? : $container->getParameter('param1');
_
どちらが少し直感的ではないように見えますか?
サービスコンテナがconfigure
で初期化されていないようです。 execute
でアクセスできます。
コンソールオプションのデフォルトについては、次のようなものを使用できます
$opt1 = $input->getOption('opt1') ? : $default;
多くの場合、Symfony2では、パラメーター/変数を取得するときにデフォルト値を設定できます。したがって、上記のソリューションのショートカットは次のようになります。
$opt1 = $input->getOption('opt1', $default);
これを答えとして置くだけなので、他に答えがない場合はこれを閉じることができます。
Execute()で$this->container = $this->getApplication()->getKernel()->getContainer();
を呼び出します。 https://stackoverflow.com/a/7517803/297679 を参照してください
私がグーグルで見つけたすべての情報(このスレッドを含む)にもかかわらず、何も機能していないようです。カーネルを入手できなかった理由がついにわかりました。
ドキュメントからの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 this:thatまたはphp application.php this:that
これは私にはうまくいきませんでした。何らかの理由で、これを行うときにカーネルが使用できません。ただし、次を使用してアプリケーションを実行する場合です。
php app/console this:that
私の推測では、app app/consoleを実行すると、カーネルの起動など、application.phpよりもはるかに多くのことが実行されます。
アプリを「phpapp/console this:that」として実行すると、すべてが正常に機能し、次を使用できます。
$this->getContainer()->get('doctrine')->getManager();
それが私が必要としていたものでした。