最後に、いくつかのグーグルと実験の後、完全な解決策を見つけました。
のdoctrine.phpを読んでくださいvendor/bin
。config-cli.php
ハードコーディングされたファイルを回避するのは非常に簡単です。
1. エンティティ マネージャーを作成する
私の場合は、ファクトリを使用しており、この方法でdoctrine.em
サービスがハイドレートされます。
($config
私のアプリに固有のものです。独自のロジックを使用するように値を変更してください。)
use Doctrine\ORM\Tools\Setup;
use Doctrine\ORM\EntityManager;
public function createEntityManager()
{
$config = $this->get('config');
$metadataConfig = Setup::createAnnotationMetadataConfiguration(
[$config->meta('app_path') . '/Entity'],
$config->oc->doctrine->dev_mode
);
return EntityManager::create((array) $config->oc->doctrine->connection, $metadataConfig);
}
2. CLI コマンドに Doctrine CLI コマンドをマージする
一部の のように、コードの一部で、おそらくコマンドラインインターフェイスをbootstrap.php
宣言します。それが私がこれを行う方法です(ファイルで定義されたコマンドを単に追加します):Symfony\Component\Console\Application
foreach
services.yml
$application = new Application('MyApp CLI', '0.0.1');
$services = $container->findTaggedServiceIds('oc.command');
foreach(array_keys($services) as $serviceId)
{
$application->add($container->get($serviceId));
}
$application->run();
それでは、Doctrine にそのコマンドをアプリケーションに注入するように依頼します。
$application = new Application('MyApp CLI', '0.0.1');
$helperSet = ConsoleRunner::createHelperSet($container->get('doctrine.em'));
$application->setHelperSet($helperSet);
ConsoleRunner::addCommands($application);
$services = $container->findTaggedServiceIds('oc.command');
foreach(array_keys($services) as $serviceId)
{
$application->add($container->get($serviceId));
}
$application->run();
それでおしまい!この GitHub の問題に関する arsfeld の回答を使用して、Doctrine コマンドのサブセットのみを追加することもできます。
3. おまけ: 必要なコマンドのみをインポートして名前を変更する
Doctrine コマンドを継承するデコレータ コマンドを作成できます (これは、Doctrine コマンドの名前を再定義するのに役立ちます。これは、Symfony Doctrine Bundle が行うように、orm:validate-schema
->doctrine:schema:validate
などです)。
これを行うにはConsoleRunner::addCommands($application);
、手順 2 で追加した行を削除します。再定義するコマンドごとに、アプリで新しいコマンドを登録する必要があります。このコマンドはextends
対象の Doctrine コマンド " " になり、configure()
メソッドをオーバーライドします。
を使用した例を次に示しorm:validate-schema
ます。
<?php
namespace MyApp\Command\Doctrine;
use Doctrine\ORM\Tools\Console\Command\ValidateSchemaCommand;
class SchemaValidateCommand extends ValidateSchemaCommand
{
protected function configure()
{
parent::configure();
$this->setName('doctrine:schema:validate');
}
}
一部の Doctrine コマンドには、 や など、コマンドの名前空間を汚染するエイリアスがorm:generate-entities
ありorm:generate:entities
ます。これらのエイリアスを削除するにはconfigure()
、 に を追加し->setAliases(array())
ます。
$this->setName('doctrine:generate:entities')->setAliases([]);
おめでとうございます。Symfony Doctrine Bundle をやり直しました:p (jk)