2012-03-20 31 views
1

當前我正在使用視圖幫助器來幫助我的調試過程。基本上我調用這個函數,它檢查1:我是否通過檢查Zend_Session_Namespace變量以及是否使用Zend_Registry在debug_mode中運行應用程序,以開發者身份登錄。如果它們都是真的,我會顯示一些不同的調試變量和任何我給輔助器作爲輸入的參數。能夠訪問Zend對象的全局幫助器函數

本來這個功能只是爲了檢查我在分配給視圖的對象中獲得了正確的信息,但我很快發現它在其他地方也很有用。目前該函數在使用$ this-> view的控制器中工作,我想我可以在技術上沿着新的Zend_View()使用某些東西;或者Zend_Controller_Action_HelperBroker :: getStaticHelper('viewRenderer');在我的模型中獲得一個視圖對象,但即使它僅用於調試,這也很難看。所以我的問題是:如何重建這個助手到一個全局函數(在模型,視圖和控制器中可用),並仍然能夠使用Zend_Session_Namespace和Zend_Registry對象,同時(儘可能)維護MVC結構體。

+0

http://framework.zend.com/manual/en/zend.controller.actionhelpers.html#zend.controller.actionhelper.writingyourown – vascowhite 2012-03-20 20:45:28

+0

「Action Helpers允許開發人員將運行時和/或按需功能注入任何擴展Zend_Controller_Action的動作控制器「 我的控制器擴展了Zend_Controller_Action,但我的視圖和模型不支持,所以這會迫使我至少編寫兩個相同函數的副本。 – Lobo 2012-03-20 20:50:38

+0

不,您可以將幫助器從控制器傳遞到視圖(如果需要的話)。或者這不符合你的使用模式? – vascowhite 2012-03-20 22:19:00

回答

3

我認爲如果你創建了一個靜態類或者一個單例類,你可以擁有所有需要的功能而不會中斷你的MVC結構。

考慮下面的簡單類有一個靜態函數:

<?php 

class My_DebugHelper 
{ 
    public static function dump() 
    { 
     $ns = new Zend_Session_Namespace('the_namespace'); // the namespace you refer to with the developer flag 
     $debug_mode = Zend_Registry::get('debug_mode'); 

     if (!isset($ns->isDeveloper) || !$ns->isDeveloper || !$debug_mode) { 
      return; 
     } 

     foreach(func_get_args() as $arg) { 
      Zend_Debug::dump($arg); 
     } 
    } 

    protected function __construct() {} 
    protected function __clone() {} 
} 

此代碼爲您提供:

  • 的,從您的應用程序(模型,控制器,幫助任何地方調用,查看能力等)
  • 所有的保護措施,以防止它在脫離上下文時被執行
  • 一個簡單的基礎,你可以擴展到

根據您的需求,至少有一兩件事你可以做的是讓靜態的,所以它可以存儲一些信息,而不是訪問它每次通話,或者添加其他方法或專門的參數,所以你可以通過一個Zend_View如果有必要的話可以反對,並將數據注入到視圖中。

你可以在應用程序的任何地方調用它,並通過一個或多個值轉儲:

My_DebugHelper::dump($someVar, $this->view, $model->getCustId()); 

我不知道如何/你的視圖助手顯示當前數據,但希望這將幫助你將你的視圖幫助器合併到你可以在任何地方調用的泛型類。

+0

這正是我正在尋找的東西,但我沒有設法將這些功能作爲框架結構的一部分。現在它工作出色。 – Lobo 2012-03-27 15:04:06