如何在 Symfony 单一命令应用程序中访问 EntityManager?
How to access the EntityManager in a Symfony Single Command Application?
我正在开发 Symfony Single Command Application。我正在使用 Doctrine 来管理实体。
我使用 Symfony CLI 创建了实体配置,现在我不确定如何从 run
方法中访问 EM。
我应该为此创建一个 SingleCommandApplication
的新子类吗?
如果你真的使用单一命令应用程序,你必须在 setCode()
方法中自行配置 Doctrine。例如。关注 these instructions.
(new SingleCommandApplication())
->setName('My Super Command') // Optional
->setVersion('1.0.0') // Optional
->addArgument('foo', InputArgument::OPTIONAL, 'The directory')
->addOption('bar', null, InputOption::VALUE_REQUIRED)
->setCode(function (InputInterface $input, OutputInterface $output) {
$paths = array("/path/to/entity-files");
$isDevMode = false;
// the connection configuration
$dbParams = [
'driver' => 'pdo_mysql',
'user' => 'db_user',
'password' => 'very_secret',
'dbname' => 'foo',
];
$config = Doctrine\ORM\Tools\Setup::createAnnotationMetadataConfiguration($paths, $isDevMode);
$em = Doctrine\ORM\EntityManager::create($dbParams, $config);
// output arguments and options
})
->run();
在单个命令应用程序中,您没有这样的“捆绑包”,因为您在框架捆绑包之外运行,而且通常您也无法访问依赖项注入。
(如果你想要 DI,在实例化的 Application
对象上调用 setDefaultCommand()
方法时,你可能会有类似 的东西,但你仍然需要实例化Doctrine 连接“手动”,即使你在不同的服务上做注入)。
我正在开发 Symfony Single Command Application。我正在使用 Doctrine 来管理实体。
我使用 Symfony CLI 创建了实体配置,现在我不确定如何从 run
方法中访问 EM。
我应该为此创建一个 SingleCommandApplication
的新子类吗?
如果你真的使用单一命令应用程序,你必须在 setCode()
方法中自行配置 Doctrine。例如。关注 these instructions.
(new SingleCommandApplication())
->setName('My Super Command') // Optional
->setVersion('1.0.0') // Optional
->addArgument('foo', InputArgument::OPTIONAL, 'The directory')
->addOption('bar', null, InputOption::VALUE_REQUIRED)
->setCode(function (InputInterface $input, OutputInterface $output) {
$paths = array("/path/to/entity-files");
$isDevMode = false;
// the connection configuration
$dbParams = [
'driver' => 'pdo_mysql',
'user' => 'db_user',
'password' => 'very_secret',
'dbname' => 'foo',
];
$config = Doctrine\ORM\Tools\Setup::createAnnotationMetadataConfiguration($paths, $isDevMode);
$em = Doctrine\ORM\EntityManager::create($dbParams, $config);
// output arguments and options
})
->run();
在单个命令应用程序中,您没有这样的“捆绑包”,因为您在框架捆绑包之外运行,而且通常您也无法访问依赖项注入。
(如果你想要 DI,在实例化的 Application
对象上调用 setDefaultCommand()
方法时,你可能会有类似