2011-12-01 87 views
1

我正在嘗試進行身份驗證,我需要一個用於MySQL的數據庫適配器。目前,我將使用這個:在Zend中,如何使用我的application.ini數據庫設置?

$db = new Zend_Db_Adapter_Pdo_Mysql(array(
    'host'  => '127.0.0.1', 
    'username' => 'webuser', 
    'password' => 'xxxxxxxx', 
    'dbname' => 'test' 
)); 

但是,它沒有意義它硬編碼到控制器時,我有我的resources.db.*集我的application.ini。我的問題是,我如何讓我的控制器獲取application.ini中的信息以獲取我的db適配器?你能否鏈接我正在拼命尋找的相關文檔頁面呢?

回答

2

訪問應用程序的資源,你需要訪問您Zend_Application,你在你的index.php文件創建的一個的引導對象。你可以將它們中的任何一個存儲在任何可以從任何地方訪問的地方,比如Zend_Registry。 假設這是你的公共/ index.php文件:

// suppose you have defined the APPLICATION_PATH constant to the application 
    // directory of your project. and the APPLICATION_ENV defines your environment 
    // like production, development or testing. 
    // create a config for your application configurations, defining your resources 
    $config = new Zend_Config_Ini(
       APPLICATION_PATH . '/configs/application.ini', 
       APPLICATION_ENV 
      ); 
    // this is the application object 
    $application = new Zend_Application(APPLICATION_ENV, $config); 

    // now resources are bootstrapping 
    $application->bootstrap(); 
    $bootstrap = $application->getBootstrap(); 

    // store them somewhere in registry, so you could access them from everywhere 
    // like controllers, models, etc. 
    Zend_Registry::set('application', $application); 
在控制器

現在(或任何其他代碼,如模型,視圖等),你可以使用訪問該應用程序對象:

$application = Zend_Registry::get('application'): 
    /*@var $application Zend_Application*/ 
    $bootstrap = $application->getBootstrap(); 
    // now you could access any resources from the $bootstrap object 

    $db = $bootstrap->getResource('db'); 
    $log = $bootstrap->getResource('log); 
    // now $db is a Zend_Db object bootstrapped from your application config 

這是訪問的應用程序引導的一般方式。但是在你的控制器中有另一種方法來訪問引導對象(以及資源​​),這就是使用控制器對象的'''getInvokeArg('bootstrap')''。因此,在你的控制器,你可以這樣做:

$bootstrap = $this->getInvokeArg('bootstrap'); 
    $db = $bootstrap->getResource('db'); 
    // now $db is a Zend_Db object bootstrapped from your application config 
2

在run函數添加您的bootstrap.php文件:

public function run() { 
    //Any other code you already had in the run function could go here 
    //Add this line to your function 
    Zend_Registry::set('options', $this->getOptions()); 
} 

然後在你的控制器,你可以通過做一些像訪問數據庫連接設置:

$options = Zend_Registry::get('options') 
$host = $options['resources']['db']['params']['host']; 
0

在你的bootstrap.php(/application/Bootstrap.php)文件,創建一個名爲_initDb()像這樣的功能:

protected function _initDb() 
{ 
    $db = $this->getPluginResource('db'); 
    // ... 
} 
相關問題