在我的layout.phtml
文件中,我有:
<?php echo $this->Test(); ?>
我在application/views/helpers/Test.php
<?php
class My_View_Helper_Test extends Zend_View_Helper_Abstract {
public function Test() {
return 'test';
}
}
我的配置文件@ configs/application.ini
:
resources.view[] = ''
resources.view.helperPath = APPLICATION_PATH "/views/helpers"
我得到错误:
Zend_Loader_PluginLoader_Exception: 没有找到名为'Test'的插件 登记处;使用路径: Zend_View_Helper_: Zend / View / Helper /:./ views / helpers / in /usr/share/php/Zend/Loader/PluginLoader.php 在406行
在类似的说明中,我无法注册我的管理员视图助手..
resources.view.helperPath.Admin_View_Helper = APPLICATION_PATH "/modules/admin/views/helpers"
我的modules/admin/views/helpers/AdminPanel.php
:
<?php
class My_View_Helper_AdminPanel extends Zend_View_Helper_Abstract {
public function AdminPanel() { return 'test'; }
}
除了使用addHelperPath在Bootstrap中执行此操作,我别无选择吗?如果是这样,有人可以证明我将如何使用我的路径吗?
答案 0 :(得分:13)
使用application.ini
可能是定义这些内容的最佳方式。我将所有视图帮助器放在我的库文件夹中:
includePaths.library = APPLICATION_PATH "/../library"
autoloadernamespaces.0 = "SNTrack_"
; -- Note, these are the only resources.view lines I have...
resources.view.doctype = "XHTML1_STRICT"
resources.view.helperPath.SNTrack_View_Helper = APPLICATION_PATH "/../library/SNTrack/View/Helper"
目录结构:
/
application/
library/
SNTrack/
View/
Helper/
Test.php
查看:
$this->test('test')
SNTrack /视图/助手/ test.php的:
class SNTrack_View_Helper_Test extends Zend_View_Helper_Abstract {
public function test($args) { return $args; }
}
答案 1 :(得分:1)
在我的引导程序中:
$view = new Zend_View();
$view->addHelperPath(DE_Config::get('DE_appDir').DIRECTORY_SEPARATOR.'lib'.DIRECTORY_SEPARATOR.'DE'.DIRECTORY_SEPARATOR.'View'.DIRECTORY_SEPARATOR.'Helper'.DIRECTORY_SEPARATOR, 'DE_View_Helper');
$viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer();
$viewRenderer->setView($view);
Zend_Controller_Action_HelperBroker::addHelper($viewRenderer);
答案 2 :(得分:1)
我刚刚遇到了这个问题,并意识到这是由于我的引导程序中存在问题:我在我的一个_init函数中定义并使用了一个新的Zend_View对象,我认为这两个函数都覆盖了我的所有其他视图设置我的bootstrap和我的application.ini文件(包括我的resources.view.helperPath定义)。违规代码是从here盲目复制的,并放入我的bootstrap中的_initJQuery()函数中,如下所示:
protected function _initJQuery() {
$view = new Zend_View();
$view->addHelperPath('ZendX/JQuery/View/Helper/', 'ZendX_JQuery_View_Helper');
$viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer();
$viewRenderer->setView($view);
Zend_Controller_Action_HelperBroker::addHelper($viewRenderer);
}
解决方案是用这个替换第一行($ view = new Zend_View()):
$this->bootstrap('view');
$view = $this->getResource('view');
关于你的专栏,要记住另一件事:
resources.view.helperPath = APPLICATION_PATH“/ views / helpers”
请注意,这仅注册路径,而不是类前缀,因此只有在辅助类具有Zend_View_Helper的默认Zend类前缀(即Zend_View_Helper_Test)时才会起作用。如果您希望该类为My_View_Helper_Test,则需要执行以下操作:
resources.view.helperPath.My_View_Helper = APPLICATION_PATH“/ views / helpers”