2010-10-11 83 views
2

我想存儲數據庫中的Zend框架的自定義路由。我已經創建了路線,但我遇到的問題是,當我添加路線時,它看起來像Zend尚未創建與數據庫的連接。強制Zend框架連接到數據庫比平常早

有誰知道這個過程最初發生在哪裏,或者我可以如何強制數據庫從Bootstrap.php中的init_routes函數進行連接?

UPDATE:

什麼我從bootstrap.php中做的是調用了一個模型,將返回所有的廠商Zend_Controller_Router_Route_Static對象。這裏是我使用內部bootstrap.php中

$frontController = Zend_Controller_Front::getInstance(); 
$router = $frontController->getRouter(); 

$vendor_routes = new Application_Model_Vendor(); 
$vendor_routes = $vendor_routes->getStaticRoutes(); 

的getStaticRoutes中的代碼()函數是如下的代碼:

public function getStaticRoutes() { 
    $select = $this->select(); 
    $select->from($this) 
     ->where("featured = 1"); 
    $rows = $this->fetchAll($select); 

    foreach($rows as $row) { 
     print_r($row); 
    } 
} 

該功能被包含在延伸Zend_Db_Table_Abstract

一個模型

我得到的錯誤如下:

<b>Fatal error</b>: Uncaught exception 'Zend_Db_Table_Exception' with message 'No adapter found for Application_Model_Vendor' in /var/www/vhosts/weddingdir/weddingdir/library/Zend/Db/Table/Abstract.php:754 
Stack trace: 
#0 /var/www/vhosts/weddingdir/weddingdir/library/Zend/Db/Table/Abstract.php(739): Zend_Db_Table_Abstract-&gt;_setupDatabaseAdapter() 
#1 /var/www/vhosts/weddingdir/weddingdir/library/Zend/Db/Table/Abstract.php(268): Zend_Db_Table_Abstract-&gt;_setup() 
#2 /var/www/vhosts/weddingdir/weddingdir/application/Bootstrap.php(17): Zend_Db_Table_Abstract-&gt;__construct() 
#3 /var/www/vhosts/weddingdir/weddingdir/library/Zend/Application/Bootstrap/BootstrapAbstract.php(666): Bootstrap-&gt;_initRoutes() 
#4 /var/www/vhosts/weddingdir/weddingdir/library/Zend/Application/Bootstrap/BootstrapAbstract.php(619): Zend_Application_Bootstrap_BootstrapAbstract-&gt;_executeResource('routes') 
#5 /var/www/vhosts/weddingdir/weddingdir/library/Zend/Application/Bootstrap/BootstrapAbstract.php(583): Zend_Application_Bootstrap_BootstrapAbstract-&gt;_bootstrap(NUL in <b>/var/www/vhosts/weddingdir/weddingdir/library/Zend/Db/Table/Abstract.php</b> on line <b>754</b><br /> 

ks再次!

回答

2

它應該按需連接。如果你有初始化數據庫連接等效init方法,你只需要確保這是你的路由前自舉,像這樣:

protected function _initRoutes() 
{ 
    // this will trigger the _initDb method. 'db' should match 
    // the name of that method 
    $this->bootstrap('db'); 

    // routes stuff here 
} 

protected function _initDb() 
{ 
    // db stuff here 
} 

編輯:好吧,看起來像你只需要告訴Zend_Db_Table類使用你的數據庫連接。在代碼中,你會怎麼做:

Zend_Db_Table_Abstract::setDefaultAdapter($db); 
中的application.ini

我認爲你可以這樣做:

resources.db.isDefaultTableAdapter = true 

,我猜你目前還沒有。看看是否解決了你的問題。有關更完整的示例,請參見http://framework.zend.com/manual/en/zend.application.available-resources.html上的DB部分。

+0

My Bootstrap.php裏面沒有_initDb()。我會假設它在需要時連接到數據庫(它在應用程序中的其他任何地方),但是在Bootstrap內部沒有。我在想這是因爲數據庫連接信息存儲在application.ini文件中,並且它可能還沒有解析該文件或其他東西。 – 2010-10-11 20:07:29

+0

application.ini的東西在所有的_init方法之前運行,所以你應該沒問題。你可以發表你如何訪問/使用路徑方法中的db類的例子嗎? $這 - >的getResource( 'DB');應該根據application.ini數據設置DB類,以便您可以嘗試使用var_dump()來查看所獲得的結果。 – 2010-10-11 20:09:50

+0

我在第一篇文章中添加了更多信息。 – 2010-10-11 20:28:27