2012-07-25 84 views
2

所以我通常都採用「URL」動作助手從定製動作助手沒有問題,訪問模塊時,使用下列內容:從默認模塊自定義動作助手訪問Zend的URL動作助手

$urlHelper = Zend_Controller_Action_HelperBroker::getExistingHelper('url'); 

但是,如果訪問默認模塊(根url,/),則會發生以下錯誤:

致命錯誤:帶有消息'Action helper'的未捕獲異常'Zend_Controller_Action_Exception'尚未向helper broker註冊/home/erahhal/Code/ZendFramework-1.11.12/library/Zend/Controller/Plugin/Broker.php on line 336

這個問題的根源是什麼?

+0

我不知道你已經給了足夠的信息來解決問題。你如何配置你的ZF應用程序?配置是什麼樣的?這只是一個URL,還是問題發生在你的默認模塊的其他地方?它也發生在其他模塊嗎?您收到的異常是否也說明了HelperBroker正在查找的文件夾? – curtisdf 2012-07-25 19:51:16

回答

2

通常,如果我想使用的網址助手控制器或動作助手的背景之外,我剛剛創建幫助自己的新實例。

您應該可以使用下面的代碼來獲得一個網址助手,並使用它:

$urlHelper = new Zend_Controller_Action_Helper_Url(); 
$url  = $urlHelper->url(array('controller' => 'foo', 
            'action'  => 'bar', 
            'module'  => 'mod')); 

我不知道爲什麼你遇到這個錯誤,但如果助手尚未註冊與前端控制器(?也許你正在調用這個太早在你的應用調度),請嘗試使用getStaticHelper()代替getExistingHelper()

$urlHelper = Zend_Controller_Action_HelperBroker::getStaticHelper('url'); 

如果URL助手尚未與插件加載註冊,它將註冊並加載它你呢。

The Helper Broker Documentation

There are also two static methods for retrieving helpers from the helper broker: getExistingHelper() and getStaticHelper(). getExistingHelper() will retrieve a helper only if it has previously been invoked by or explicitly registered with the helper broker; it will throw an exception if not. getStaticHelper() does the same as getExistingHelper(), but will attempt to instantiate the helper if has not yet been registered with the helper stack. getStaticHelper() is a good choice for retrieving helpers which you wish to configure.

+0

感謝您的幫助。我試過getHelper,但仍然有一個致命的錯誤。最終工作的是getStaticHelper,如果它不存在,它會實例化助手。 – colordrops 2012-07-27 18:46:22

+0

我剛剛根據你的發現更新了答案。它看起來像getHelper會爲你註冊但不是。我添加了一個來自文檔的參考,它解釋了getStaticHelper如何在您找到時爲您實例化它。 – drew010 2012-07-27 18:56:59