2

Doctrine 2 と Zend Framework 1.12 (または 1.11、または別のもの - それが重要かどうかはよくわかりませんが、私が使用しているのは 1.12 です) を統合する方法についての説明を探していました。私はいくつかのブログ投稿を見つけることができ、スタック オーバーフローでここで質問を解決することさえできましたが、それらをすべて読んだ後、私が求めていたものを得ることができませんでし。ですから、誰かがこれを達成するための鍵を私に与えてくれたら、とてもありがたいです.

どうもありがとうございました!

編集:
返信ありがとうございますが、ZF2 の最近のリリースにより、すべての新しい改善点と機能を利用するために ZF1 を離れることにしました。@KTastrophy が言ったように、ZF と Doctrine の統合は非常に簡単になりました (すべてがより簡単になり、ZF2 との一貫性が向上したと言っても過言ではありません)。もう一度ありがとう!

4

3 に答える 3

2

doctrine PEAR インストールを使用して doctrine 2 を ZF に統合するのは簡単です。インストール後、これをブートストラップに入れるだけです:

protected function _initDoctrine() {
    require_once "Doctrine/ORM/Tools/Setup.php";
    \Doctrine\ORM\Tools\Setup::registerAutoloadPEAR();

    $options = $this->getOptions();

    $loader = new \Doctrine\Common\ClassLoader('YourNamespace', realpath(APPLICATION_PATH . "/../library"));
    $loader->register();


    $isDevMode = (APPLICATION_ENV == 'production') ? false: true;
    $entityManager = \Doctrine\ORM\EntityManager::create(
        $options['doctrine']['dbal'],
        \Doctrine\ORM\Tools\Setup::createYAMLMetadataConfiguration(array(
            realpath(APPLICATION_PATH."/../library/YourNamespace/Yaml"),
        ), $isDevMode)
    );

    Zend_Registry::set('entityManager', $entityManager);

    return $entityManager;
}

$this->getOptions()、構成ファイルからデータベース名、ユーザー、およびパスワードを取得します。

于 2012-09-08T16:58:28.917 に答える
0

このチュートリアルを例にとると

http://christian.soronellas.es/2010/12/19/zend-framework-and-doctrine-2/?lang=en

構成コードのこの部分を参照してください

$config = new Configuration();         
$config -> setMetadataCacheImpl($cache);         
$driverImpl = $config -> newDefaultAnnotationDriver($options['entitiesPath']);         
$config -> setMetadataDriverImpl($driverImpl);        
 $config -> setQueryCacheImpl($cache);        
 $config -> setProxyDir($options['proxiesPath']);         
$config -> setProxyNamespace('Application\Models\Proxies');         
$config -> setAutoGenerateProxyClasses(('development' == APPLICATION_ENV));        
 $em = EntityManager::create(             $this -> _buildConnectionOptions($options),             $config        );

関数newDefaultAnnotationDriverは、実際にはエンティティパスの配列を取ります。これはあなたが創造的になる機会を生み出します。これを知ったとき、私は単に各モジュールにエンティティフォルダーを作成し、配列のnewDefaultAnnotationDriverパラメーターに沿って各パスを渡しました。もちろん、これを行うことにより、モジュールごとに名前空間を設定する必要があります。

于 2012-09-07T15:22:18.800 に答える
-1

ビスナ使ってる

このパッチを適用する必要がありますhttps://github.com/guilhermeblanco/ZendFramework1-Doctrine2/pull/45

そして、それは私にとってうまくいきます。

コントローラーには、エンティティマネージャーを取得するためのこの関数があります

/**
 * Retrieve the Doctrine Container.
 *
 * @return Doctrine\ORM\EntityManager
 */
public function getEntityManager()
{
    return $this->getInvokeArg('bootstrap')->getResource('doctrine')->getEntityManager();
}
于 2012-09-08T13:55:09.260 に答える