2011-03-23 56 views
1

我試圖讓我的Zend應用程序中的Propel工作,似乎我可以得到Propel庫來加載(從庫/推進),但是當我被調用時例外:'運行時配置文件中的數據源[默認]'沒有連接信息(當我嘗試建立連接時:'Propel :: getConnection')。我的Db甚至沒有被命名爲「默認」。太對了,現在我如何讓zend識別推進ORM的路徑

  require_once 'propel/Propel.php'; 
     Propel::setConfiguration($this->getOptions('propel/MyPropel-conf.php')); 
     Propel::initialize(); 

     // so we can get the connection from the registry easily 
     return Propel::getConnection(); 

我想行走CONFIGS(類映射的conf以及)是在「/應用/ CONFIGS」(副本有:我有這個在我的bootstrap.php從另一個SO問題/答案),但我想如果我可以從圖書館/推進器中加載Propel,那麼可能將我的'conf'文件移動到那裏,我也可以加載它們。看來,如果我'強制'配置,通過手動加載參數,或者如果我似乎把它放在臨時'正確'的位置(或使用絕對路徑),我得到的異常是: 'Unable打開PDO連接[包裝:SQLSTATE [28000] [1045]拒絕訪問用戶'www-data'@'localhost' 就好像Propel不關注我的配置。 我的配置看起來像這樣;從XML轉換:

$conf = array (
    'datasources' => 
    array (
    'unmActTestDB' => 
    array (
     'adapter' => 'mysql', 
     'connection' => 
     array (
     'dsn' => 'mysql://root:[email protected]/unmActTestDB', 
    ), 
    ), 
    'default' => 'unmActTestDB', 
), 
    'log' => 
    array (
    'ident' => 'propel-act', 
    'level' => '7', 
), 
    'generator_version' => '1.5.6', 
); 
$conf['classmap'] = include(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'classmap-unmActTestDB-conf.php'); 
return $conf; 

如果有幫助,我還有了Zend PDO DB適配器裝在文件的application.ini太多,會造成衝突?有沒有一種標準的方式讓Propel與Zend一起工作?或者任何人都可以看到我做錯了什麼?

我已經在SO上發佈了幾個帖子,還有一些熱門帖子,如The Adventures Of Merging Propel With Zend Framework,Zend的開發區域Integrating Propel with the Zend Framework,以及其他包括Propel Docs在內的一些熱門帖子。他們有幫助,但我真的很困難。提前致謝!我現在的Zend的目錄結構看起來像這樣(W /兩個推進confs也可在庫/推進文件夾:

Directory Structure

+0

我已經找出路徑問題和連接問題是由於我的運行時conf文件中的的遺漏。 – rhaag71 2011-03-23 18:01:36

+0

感謝分享。 +1 – 2011-03-24 19:20:06

+0

您應該將其作爲答案發布。回答你自己的問題沒什麼不妥 – Phil 2011-03-29 04:05:03

回答

2

我落得這樣做是這樣的:

我上得到了良好的抓地力如何使用Propel從'reverse'生成我的模型,它創建了一個'schema.xml'文件,用於構建我的模型。

此外,我的'runtime.xml'文件對我的需要,構建後我沒有連接到正確的數據庫,因爲我省略了一些標籤,總體而言,它非常簡單:

<?xml version="1.0" encoding="UTF-8"?> 
<config> 
<log> 
    <ident>unmActTestDB</ident> 
    <level>7</level> 
</log> 
<propel> 
    <datasources default="unmActTestDB"> 
    <datasource id="unmActTestDB"> 
    <adapter>mysql</adapter>  
    <connection> 
    <dsn>mysql:host=localhost;dbname=unmActTestDB</dsn> 
    <user>zend</user> 
    <password>PASSWORD</password> 
    <database>unmActTestDB</database> 
    </connection>  
    </datasource> 
    </datasources> 
</propel> 
</config> 

'dsn'標籤必須採用上面的格式,並添加'user','password'和'database'標籤。這解決了我與數據庫連接錯誤的問題。正如上面(和這裏)所引用的例外是:'您的運行時配置文件中沒有數據源的連接信息[默認]'

就我的模型加載而言,我最終將它們放入我的'庫'文件夾,我已經有了該文件夾自動加載在我的應用程序,再加上它似乎是一個很好的地方形成他們。

這裏是我的「更新」目錄結構的圖像:My directory structure w/ Propel models

注加在我的目錄「unmActTestDB」文件夾中,這是我的ORM的模型。 另一件需要注意的是,我把我生成的'conf'文件放到我的'application/configs'文件夾中。在更正runtime.xml文件和'重建'後,這些都是正確的。

作爲一個方面說明,我不得不編輯我的'模式。xml'文件手工(幾次:))...原始數據庫使用表的複數名稱,所以我編輯所有'phpname'聲明(實際上,在聲明標籤上的屬性)是單數,所以我不會訪問一個名爲'用戶'的對象...而現在我可以訪問'用戶'對象。我保持表名相同(表格是複數,我不會有任何問題導入現有的數據等)。這是我的另一個問題的答案,這裏看到How to get related object Propel ORM

我做的另一個大的編輯是爲數據庫中的許多SQL視圖添加主鍵聲明(同樣是屬性),同時我在聲明中添加了「只讀」和「noSQL」屬性,這樣我將有權訪問(通過Propel模型)我的觀點。

而且,只是要徹底,併爲那些有興趣誰這裏是除了我的「的bootstrap.php」文件,做我的「行走初始化」我...

protected function _initPropel() 
     { 
      $this->_logger->info('Bootstrap ' . __METHOD__); 

      require '../library/propel/Propel.php'; 
      Propel::init(APPLICATION_PATH . '/configs/unmActTestDB-conf.php'); 
      Propel::initialize(); 

      return Propel::getConnection(); 
     } 

另注:'$ this - > _ logger-> info('Bootstrap'。METHOD);'調用我剛剛告訴'firePHP'這個方法已經加載的'logging'方法。 /configs/unmActTestDB-conf.php'調用Propel生成的第二個'conf'文件...這裏是該文件的'更正'版本(即unmActTestDB.conf文件),請注意'連接'數組。

<?php 
// This file generated by Propel 1.5.6 convert-conf target 
// from XML runtime conf file runtime-conf.xml 
$conf = array (
    'datasources' => 
    array (
    'unmActTestDB' => 
    array (
     'adapter' => 'mysql', 
     'connection' => 
     array (  
     'dsn' => 'mysql:host=localhost;dbname=unmActTestDB', 
     'user' => 'zend', 
     'password' => 'PASSWORD', 
     'database' => 'unmActTestDB', 
    ), 
    ), 
    'default' => 'unmActTestDB', 
), 
    'log' => 
    array (
    'ident' => 'unmActTestDB', 
    'level' => '7', 
), 
    'generator_version' => '1.5.6', 
); 
$conf['classmap'] = include(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'classmap-unmActTestDB-conf.php'); 
return $conf; 

我現在已經關閉了!這是一個很好的方法,否則我會爲我的應用程序尋找和編寫許多映射類。 Propel(當前)爲此應用程序生成300多個模型!加上基類,它會把我永遠...