Symfony2 console HelperSet



我正在使用Symfony2组件制作应用程序,我被Symfony控制台卡住了。问题是我初始化控制台

$objectRepository = ObjectRepository::getInstance();
$console = $objectRepository->get('console');
if ( ! $console instanceof SymfonyComponentConsoleApplication) {
    echo 'Failed to initialize console.' . PHP_EOL;
}
$helperSet = $console->getHelperSet();
$helperSet->set(new EntityManagerHelper($objectRepository->get('entity_manager')), 'em');
$console->run();

我有教义创建命令别名,即

namespace MyConsoleCommand;
use DoctrineORMToolsConsoleCommandSchemaToolCreateCommand as BaseCommand;
class CreateCommand extends BaseCommand
{
    protected function configure()
    {
        parent::configure();
        $this->setName('doctrine:schema:update');
    }
}
Doctrine\ORM\Tools\Console\

Command\SchemaTool\CreateCommand 正在使用 em helper,问题出在 Symfony\Component\Console\Application doRun() 方法

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

应用程序在 HelperSet 中保留 3 个帮助程序,分别是(对话框、格式、实体管理器和 em(em 是实体管理器的别名))。找到命令后,命令不会继承应用程序帮助程序集,并且只有默认的对话框和格式帮助程序。

我有扩展symfony默认应用程序类和重写doRun()方法的解决方案,但这不是最好的方法。

看起来应用程序和命令可以有不同的帮助程序集,所以我解决了

namespace MyConsoleCommand;
use DoctrineORMToolsConsoleCommandSchemaToolCreateCommand as BaseCommand;
use SymfonyComponentConsoleInputInputInterface;
use SymfonyComponentConsoleOutputOutputInterface;
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);
    }
}

相关内容

  • 没有找到相关文章