2012-03-12 61 views
1

我創建了一個名爲config.xml的自定義XML配置文件,並將其放置在Zend Framework的configs目錄中。我想在我的一個控制器中使用Zend_Config_Xml。我有什麼不工作,它說「發生了錯誤,應用程序錯誤」。如何從控制器讀取自定義XML配置文件?這是我在我的控制器至今:Zend Framework - 訪問自定義配置文件

class IndexController extends Zend_Controller_Action 
{ 
    public function init() 
    { 
     /* Initialize action controller here */ 
    } 

    public function indexAction() 
    { 
     // action body 
     $config = new Zend_Config_Xml('config.xml', 'staging'); 
     echo $config->host; 
    } 
} 
+0

你能提供更多的細節,也許是有問題的xml文件。你也嘗試過'var_dump($ config)'來驗證文件正在讀取。這種情況是非常可能的。 – danielrsmith 2012-03-12 18:56:05

+0

你正在提供一個沒有路徑的文件名,你確定它會被找到嗎? – 2012-03-13 13:46:21

回答

3

也許只是路徑需要修復:

$config = new Zend_Config_Xml(APPLICATION_PATH.'/configs/config.xml', 'staging'); 

如果沒有,檢查錯誤日誌,看看實際的錯誤信息是什麼。

編輯:要在引導程序中執行此操作,最簡單(儘管可能不是最佳)方法是添加新的資源方法並將配置對象存儲在註冊表中。添加到您的引導類:

protected function _initCustomConfig() 
{ 
    $config = new Zend_Config_Xml('config.xml', 'staging'); 
    Zend_Registry::set('config', $config); 

    return $config; 
} 

以後可以使用,然後訪問它:

$config = Zend_Registry::get('config'); 
+1

我編輯了我的答案,向您展示瞭如何在引導程序中執行此操作。 – 2012-03-13 12:59:51

+0

謝謝蒂姆。只是好奇,Bootstrap類是否會在每個請求上實例化,觸發所有以_init開頭的方法?另外,你知道Zend_Registry是否在每個請求中被重置,或者是否存儲在某種持久存儲位置?該文件說,它始終可用於整個應用程序。我猜測這只是一個帶有靜態條目的全局類。 – skaterdav85 2012-03-16 23:30:13

+0

是的,引導程序及其init方法在每個請求上運行。 Zend_Registry不會在請求之間持續存在,它只是一個帶有靜態條目的全局類。 – 2012-03-17 09:00:06

1

如果你在本地調試的問題,首先在應用程序中添加這些命令實現更好的錯誤報告.ini的開發部分:

phpSettings.error_reporting   = E_ALL 
phpSettings.display_startup_errors = 1 
phpSettings.display_errors   = 1 

默認情況下,zend框架不顯示內部錯誤。

如果您要加載Zend_Config文件,最好使用絕對路徑加載它。

public function indexAction() 
    { 
     // action body 
     $config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/config.xml', 'staging'); 
     echo $config->host; 
    } 
相關問題