如何添加视图助手目录(Zend框架)

19

我从ZF (1.9.7)开始,并希望使用一个在我所有项目之间共享的库中的视图助手。但我找不到如何将其目录添加到助手路径中。当我将它们放在应用程序的助手路径中时,我的助手可以正常工作。

这是错误消息,其中我可以找到ZF助手的路径和应用程序助手的路径。

object(ArrayObject)#71 (3) {
  ["exception"]=>
  object(Zend_Loader_PluginLoader_Exception)#70 (6) {
    ["message:protected"]=>
    string(151) "Plugin by name 'Voo' was not found in the registry; used paths:
Zend_View_Helper_: Zend/View/Helper/;C:/ZendStd/www/applis/VOO4_PROJECTX/views\helpers/"
    ["string:private"]=>
    string(0) ""
    ["code:protected"]=>
    int(0)
    ["file:protected"]=>
    string(89) "C:\Program Files\Zend\ZendServer\share\ZendFramework\library\Zend\Loader\PluginLoader.php"
    ["line:protected"]=>
    int(401)

祝一切顺利
Cédric

5个回答

38

使用Zend_Application视图资源可以非常轻松地实现。如果您正在使用ini配置文件,请添加以下行:

resources.view.helperPath.My_View_Helper = "My/View/Helper"

键的结尾是类名前缀,值是它们所在路径。


非常感谢,你帮我节省了5个小时。 - ononononon

11

通过Zend_View_Abstract::addHelperPath()添加帮助路径。您可以直接在现有的View实例上调用此方法。

启动期间,还可以以多种方式配置Helper路径。请查看ZF手册章节Zend_Application以了解如何使用引导类和资源:


注:原文中的代码标记已被保留。

1
虽然所有这些选项都是正确的,并且可以工作,但我认为David建议的application.ini解决方案是“最佳实践”。此外,在您的“_initView()”中,您可以使用$this->bootstrap('view'); $view = $this->getResource('view');来使用应用程序.ini视图,而不是随意创建的视图... - gnarf
除了 addHelperPath() 之外,bootstrap 示例是从 ZF 参考指南中逐字复制的。它不应被视为其他任何东西,而只是一个示例。我很清楚有不同的方法来做到这一点(例如使用 Ini)。欢迎您采用不同的方法。 - Gordon

5

使用时出现了一个问题

resources.view.helperPath.App_View_Helper = APPLICATION_PATH "/../library/App/views/helpers"

即使是模块中的本地辅助程序,我也无法在布局中访问任何视图助手。(未在注册表中找到名称为“LoggedInAs”的插件),但仍然可以在视图模板文件中工作。

我在布局文件末尾放置了这段代码“echo Zend_Debug :: dump($ this)”,下面是部分输出结果。

        ["_prefixToPaths:protected"] => array(3) {
          ["Zend_View_Helper_"] => array(2) {
            [0] => string(17) "Zend/View/Helper/"
            [1] => string(16) "./views\helpers/"
          }
          ["ZendX_JQuery_View_Helper_"] => array(1) {
            [0] => string(25) "ZendX/JQuery/View/Helper/"
          }
          ["Zend_View_Helper_Navigation_"] => array(1) {
            [0] => string(28) "Zend/View/Helper/Navigation/"
          }
        }

但是在引导文件中使用这些代码时,没有问题。
    //Initialize and/or retrieve a ViewRenderer object on demand via the helper broker
    $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
    $viewRenderer->initView();
    //add the global helper directory path
    $viewRenderer->view->addHelperPath(APPLICATION_PATH.'/../library/App/views/helpers', 'App_View_Helper');

输出结果如下:
            ["_prefixToPaths:protected"] => array(4) {
              ["Zend_View_Helper_"] => array(3) {
                [0] => string(17) "Zend/View/Helper/"
                [1] => string(16) "./views\helpers/"
                [2] => string(86) "D:/zf/application/modules/default/views\helpers/"
              }
              ["App_View_Helper_"] => array(1) {
                [0] => string(85) "D:\zf\application/../library/App/views/helpers/"
              }
              ["ZendX_JQuery_View_Helper_"] => array(1) {
                [0] => string(25) "ZendX/JQuery/View/Helper/"
              }
              ["Zend_View_Helper_Navigation_"] => array(1) {
                [0] => string(28) "Zend/View/Helper/Navigation/"
              }
            }

你的解决方案非常好用!我一直在为整个应用程序和每个模块使用助手!这正是我一直在寻找的!;) - Rafael Moni

1

编辑:查看zend框架中的视图助手,以了解使用Rob Allen的Loggedinas视图助手更详细的方法。

你不仅可以像David Caunt指定的那样做,还可以在你的引导程序中这样做。请注意,在Zend Framework中,总是有多种方法来完成任何事情。

查看http://devzone.zend.com/article/3412

如果您可以访问视图对象,请执行以下操作。

<?php    
$view->addHelperPath('My/View/Helper/', 'My_View_Helper'); 
?>

如果你在一个前置控制器插件中,可能需要获取视图对象。

此外,请查看这一系列非常棒的帖子,从这里开始:

http://zend-framework-community.634137.n4.nabble.com/Getting-view-from-Bootstrap-ZF1-8-tp659447p659460.html


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接