4

私が書いている新しい Zend Framework アプリの ORM として Doctrine を使用することに興味があります。できるだけ簡単に統合するための最良の方法を見つけようとしています。私が見つけたすべての例は異なっており、それらの多くは ZF 1.8 の新しいオートローディング機能よりも前のものです。それらのどれもまだ私のために働いていません。

誰かがこれを行う良い方法を持っていますか? 私はこれをブートストラップ ファイルに入れたいと思っていますが、Zend_Application_Resource プラグインを作成することを提案する人もいます。難しい部分は、Doctrine 名前空間と、デフォルトで Zend の自動読み込み規則に従わないモデル クラスの両方で正しく機能するロード パスを取得することです。

何かご意見は?ありがとう。

4

3 に答える 3

3

数週間前に Doctrine と Zend Framework の Resource Bootstrapper を書き、それをすべて小さなラッパー フレームワークに変えました。ZF と Doctrine は素晴らしいチームだと思うからです。ここで記事を読むことができます: http://coffeecoders.de/2009/06/using-the-zend-framework-18-bootstrapper-and-doctrine-110/

これは、Bootstrap リソース構成を介して完全に構成可能です (例も含まれています)。残念ながら、Doctrine はファイル名と同じクラス名 (ZF 命名スキームと一致しない) を持つモデル フォルダー内のモデルを検索するため、実際には Doctrine Autoloader の登録を取り除くことはできませんでした。リソース ローダーは次のようになります。

<?php
/**
 * Doctrine model loading bootstrap resource. Options must provide a connection string.
 * directory option for model directory is optional (default is ./models).
 * Further options will be set for the Doctrine manager via setAttribute (e.g. model_loading). 
 * @author daff
 */
class Cuckoo_Application_Resource_Model extends Zend_Application_Resource_ResourceAbstract
{
    public function init()
    {
        $manager = Doctrine_Manager::getInstance();
        $options = $this->getOptions();

        foreach($options as $key => $value)
        {
           if($key != 'connection' && $key != 'directory')
                    $manager->setAttribute($key, $value);
        }

        if(empty($options['connection']))
            throw new Exception("No database connection string provided!");
        Doctrine_Manager::connection($options['connection']);
        if(empty($options['directory']))
            $dir = './models';
        else
            $dir = $options['directory'];
        Doctrine::loadModels(realpath($dir));
        return $manager;
    }
}
于 2009-06-10T13:08:27.170 に答える
1

http://weerophinney.net/matthew/archives/220-Autoloading-Doctrine-and-Doctrine-entities-from-Zend-Framework.html

この投稿を見てください。詳細な説明、ディレクトリ構造、および自動読み込み機能の使用方法が記載されています。

于 2009-11-06T08:27:34.923 に答える
0

自動ロードに関する限り、Doctrineローダーを新しいZend_Loader_Autoloaderスタックで非常に簡単に使用できます。このページを見てください。特に、pushAutoloader()メソッドについて言及している場合はそうです。

ただし、基本的な概要は次のとおりです。

$autoloader = Zend_Loader_Autoloader->getInstance();
$autoloader->pushAutoloader(array('Doctrine', 'autoload'), 'Doctrine');

これは、スタック内の他のオートローダーによってまだ検出されていない場合、Doctrineで始まるクラスに対してのみDoctrine独自のオートローダーを使用します。

これが少し役立つことを願っています。

于 2009-06-10T05:50:09.177 に答える