Zend:我在哪里/如何注册自定义视图助手?

时间:2010-02-03 19:14:42

标签: zend-framework

在我的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中执行此操作,我别无选择吗?如果是这样,有人可以证明我将如何使用我的路径吗?

3 个答案:

答案 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”

相关问题