0

Symfony2コンポーネントを使用してアプリケーションを作成していますが、symfonyコンソールでスタックしました。問題は、コンソールを初期化することです

$objectRepository = ObjectRepository::getInstance();

$console = $objectRepository->get('console');
if ( ! $console instanceof \Symfony\Component\Console\Application) {
    echo 'Failed to initialize console.' . PHP_EOL;
}

$helperSet = $console->getHelperSet();
$helperSet->set(new EntityManagerHelper($objectRepository->get('entity_manager')), 'em');

$console->run();

そして、私は教義の作成コマンドエイリアスを持っています

namespace My\Console\Command;

use Doctrine\ORM\Tools\Console\Command\SchemaTool\CreateCommand as BaseCommand;

class CreateCommand extends BaseCommand
{
    protected function configure()
    {
        parent::configure();

        $this->setName('doctrine:schema:update');
    }

}

Doctrine \ ORM \ Tools \ Console \ Command \ SchemaTool \ CreateCommandはemヘルパーを使用しており、問題はSymfony \ Component \ Console \ Application doRun()メソッドにあります

$command = $this->find($name);
$this->runningCommand = $command;
$statusCode = $command->run($input, $output);

アプリケーションは、HelperSetに(dialog、format、entityManager、em(emはentityManagerのエイリアス))の3つのヘルパーを保持します。コマンドが見つかった後、コマンドはアプリケーションヘルパーセットを継承せず、デフォルトのダイアログヘルパーとフォーマットヘルパーのみを持ちます。

symfonyのデフォルトのApplicationクラスを拡張し、doRun()メソッドを書き直すソリューションがありますが、それは最善の方法ではありません。

4

1 に答える 1

0

アプリケーションとコマンドは異なるヘルパーセットを持つことができるように見えるので、私は問題を解決しました

namespace My\Console\Command;

use Doctrine\ORM\Tools\Console\Command\SchemaTool\CreateCommand as BaseCommand;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

class CreateCommand extends BaseCommand
{

    protected function configure()
    {
        parent::configure();

        $this->setName('doctrine:schema:create');
    }

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $this->setHelperSet($this->getApplication()->getHelperSet());

        parent::execute($input, $output);
    }

}
于 2012-11-20T13:59:53.150 に答える