我正在開發一個 Symfony單命令應用程式。我正在使用 Doctrine 來管理物體。
我使用 Symfony CLI 創建了物體配置,現在我不確定如何從該run方法中訪問 EM 。
我應該SingleCommandApplication為此創建一個新的子類嗎?
uj5u.com熱心網友回復:
如果您真正使用的是單一命令應用程式,則必須在該setCode()方法中自行配置 Doctrine 。例如,遵循這些說明。
(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,你可能有這樣的事情這同時呼叫setDefaultCommand()的實體化方法Application的物件,但你仍然需要實體化原則連接“手動”,即使你是在一個不同的服務做將被注入)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/380555.html
