簡體   English   中英

將Doctrine與Zend Framework 1.8應用程序集成

[英]Integrate Doctrine with Zend Framework 1.8 app

我有興趣使用Doctrine作為我正在編寫的新Zend Framework應用程序的ORM。 我正試圖找出盡可能簡單地整合它的最佳方法。 我發現的每個例子都不同,其中很多都是ZF 1.8中新的自動加載功能的最新版本。 他們都沒有為我工作過。

有沒有人有一個很好的方法來做到這一點? 我傾向於將它放在我的bootstrap文件中,但有些人建議制作一個Zend_Application_Resource插件。 困難的部分似乎是讓負載路徑正確地運行Doctrine命名空間和模型類,默認情況下不遵循Zend自動加載約定。

有什么想法嗎? 謝謝。

幾周前我為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。 資源Loader看起來像這樣:

<?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;
    }
}

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

看看這篇文章。 它提供了詳細的說明,目錄結構以及如何使用自動編組功能。

就自動加載而言,您可以非常輕松地將Doctrine加載器與新的Zend_Loader_Autoloader堆棧一起使用。 看一下這個頁面 ,特別是它提到了pushAutoloader()方法。

不過,這是基本的運行:

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

這將使用Doctrine自己的自動加載器,僅用於以Doctrine開頭的類,如果堆棧中的其他自動加載器尚未找到它們。

希望這個對你有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM