我正在使用 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 中保留了 3 个助手,它们是(对话框、格式、实体管理器和 em(em 是 entityManager 的别名))。找到命令后,命令不继承应用程序助手集,只有默认对话框和格式助手。
我有扩展 symfony 默认 Application 类并重写 doRun() 方法的解决方案,但这不是最好的方法。