[英]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;
}
}
看看這篇文章。 它提供了詳細的說明,目錄結構以及如何使用自動編組功能。
就自動加載而言,您可以非常輕松地將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.