0

私はORMの世界に不慣れで、doctrine 2をzfプロジェクトに統合しています。私はドクトリンのドキュメントとさまざまな記事を読み、それを統合しました:)。

マッパーとエンティティを生成するための既存の DB があります。デフォルトのアノテーションの代わりに XML/YAML マッパーを使用したいと考えています。

「 doctrine.php (doctrine 公式ドキュメントで提供)」ファイルが存在するbin ディレクトリで以下のコマンドを実行することにより、マッパーとエンティティを生成する CLI コマンドがどこにでも表示されます。

マッパーを生成するには:

         *php doctrine orm:convert-mapping --from-database xml  /path/to/mappers*

エンティティ/モデル クラスを生成するには:

         *./doctrine orm:generate-entities /path/to/models/or/entities*

しかし、コマンドを実行してマッパー/エンティティを生成したくありません。私はそれを行うPHPスクリプトを探しています(コントローラーでアクションメソッドを呼び出すことにより、例: www.doctrineproj.com/admin/mdoels/autogenerate/ )。

CLIスクリプトを実行する代わりに、APIクラスまたはphpコードでこれを行う方法はありますか. のように呼び出すことによって可能性があります

マッパーを生成するには: doctrine_core:: generateMappers(dbParams,mapperDriver)

エンティティを生成するには: doctrine_core::generateEntities(metaData)

また

システムのような呼び出しを使用して、php スクリプト ファイルからすべての CLI コマンドを実行する方法はありますか?

上記のcliコマンドを使用して、 exec() および system() を使用してみました。しかし、それはうまく機能していません:(。

アクションメソッドからマッパーを生成するために使用したコードは次のとおりです

パブリック関数 autogenerateAction(){

     $result = array();
    //change the current working DIR to bin
    $cliPath = "cd ". APPLICATION_PATH . "/bin";
    exec($cliPath,$result);

    //construct the CMD to generate the XML files from the DB tables
    $mapperDir = APPLICATION_PATH. "/models/entities/xml-mapper/";
    $mapperType = "xml";

    $generateMappersCmd = "php doctrine orm:convert-mapping --from-database  " . $mapperType . ' '  . $mapperDir ;

    //execute the CMD
    $result = system($generateMappersCmd);

}

しかし、上記のコードは目的のディレクトリにマッパーを作成していません。

自動化されたphpスクリプトを使用してDBからマッパーとエンティティを自動生成するための最良の解決策を提案してください。

最善の解決策を楽しみにしています。

ありがとうラージ

4

1 に答える 1

0

次に試してください(コントローラーのいくつかの方法で):

$kernel = $this->get('kernel');
$application = new \Symfony\Bundle\FrameworkBundle\Console\Application($kernel);
$application->setAutoExit(false);

$options = array(
    'command' => 'doctrine:generate:entity',
    '--entity' => "SomeDemoBundle:YourEntityName",
    '--fields' => "name:string(255) price:float description:text",
    '--with-repository' => true,
    '--format' => 'xml',
);

$fp = tmpfile();
$out = new StreamOutput($fp);
$in = new \Symfony\Component\Console\Input\ArrayInput($options);
$in->setInteractive(false);
$application->run($in, $out);
于 2012-08-31T21:09:52.987 に答える