2011-04-03 46 views
3

我已經寫了一個自定義ACL類作爲Action Helper。類名是Controller_Helper_Acl,位於文件applications/controllers/helpers/acl.php中。我的問題是我的應用程序無法定位文件。如何在Zend Framework中最好添加這個Action Helper路徑

我想使用Action Helper Event Hooks,所以我需要儘早實例化類。在我的bootstrap.php中,我嘗試了Helper Broker的addPath()方法,但是在使用new關鍵字時不起作用。 (據推測,它只是告訴代理在需要時調用該類的時候在哪裏查找文件)。

如果我在引導中放入了require_once,然後使用new關鍵字實例化Controllers_Helpers_Acl,它工作正常,但我不認爲這是一個可行的解決方案(因爲我將在目錄中有很多Action Helpers)。

我試着用$ loader-> registerNamespace('Controllers_Helpers_')添加一個路徑到Autoloader,然後複用類名,但是仍然沒有找到文件。 (也許我有錯誤的語法?)

其他人如何解決這個問題?我懷疑這是我對Autoloader的經驗不足,這是真正的問題。

回答

2

該文件應位於library/custmname/controller/helper/acl.php,類名應爲Customname_Controller_Helper_Acl,要獲得對它的訪問權限,您需要在bootstrap中註冊名稱空間Customname,通過application.ini或硬編碼index.php或Bootstrap.php,我會推薦使用application.ini強硬(加上這行autoloaderNamespaces[] = "Customname_"。有很多例子可以告訴你如何實現這個...

+0

感謝Poelinca,它運行良好。 – 2011-04-03 21:46:57

+0

你歡迎 – 2011-04-03 22:01:15

3

你可以在Bootstrap中指定這個路徑.php如下:

protected function _initAutoload() { 
     $autoLoader = Zend_Loader_Autoloader::getInstance(); 

     $resourceLoader = new Zend_Loader_Autoloader_Resource(array(
        'basePath' => APPLICATION_PATH, 
        'namespace' => '' 
     ); 

     $resourceLoader->addResourceType('controller', 'controllers/helpers/', 'Controller_Helper_'); 

     $autoLoader->pushAutoloader($resourceLoader); 
    } 

希望這會有所幫助。

4

你也可以指定你的動作助手路徑在的application.ini

resources.frontController.actionHelperPaths.My_Controller_Action_Helper = "My/Controller/Action/Helper"

+0

我想從路徑添加動作助手Application_Controller_Helper 但它產生的插件名稱的例外沒有發現...... 我使用 'resources.frontController.actionhelperpaths.Application_Controller_Helper = APPLICATION_PATH「/控制器/幫手」 ' – 2014-05-30 12:01:12