【问题标题】:How to add a view helper directory (zend framework)如何添加视图助手目录(zend 框架)
【发布时间】:2011-01-21 02:08:07
【问题描述】:

我从 ZF (1.9.7) 开始,我想使用我所有项目之间共享的库中的 View Helpers。但我找不到如何将它的目录添加到助手路径。当我将它们放在应用程序的帮助程序路径中时,我的 herpers 工作正常。

这是错误,我在其中找到 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)

最好的问候
塞德里克

【问题讨论】:

    标签: php zend-framework view-helpers


    【解决方案1】:

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

    帮助程序路径也可以在引导期间以各种方式配置。查看Zend_Application 上的 ZF 手册章节,了解如何使用 Bootstrap 类和资源:

    【讨论】:

    • 虽然所有这些选项都是正确的,并且会起作用,但我觉得 David 建议的 application.ini 解决方案是“最佳实践”。此外,在您的“_initView()”中,您可以使用 $this->bootstrap('view'); $view = $this->getResource('view'); 来使用 application.ini 视图,而不是您随机创建的视图...
    • @gnarf 除了addHelperPath(),引导示例是从 ZF 参考指南中 1:1 复制的。它不应该被视为其他任何东西,而是一个例子。我很清楚有不同的方法可以做到这一点(例如使用 Ini)。随意做不同的事情。
    【解决方案2】:

    使用视图的内置 Zend_Application 资源可以很容易地完成。如果您使用的是 ini 配置,请添加如下一行:

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

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

    【讨论】:

    • 非常感谢您为我节省了 5 个小时
    【解决方案3】:

    我编写了一个简短的教程,用于从一个通用目录注册 zend 视图助手,该目录可以在整个应用程序中访问。请看一下。

    http://www.mixedwaves.com/2010/03/accessing-and-using-zend-view-helpers-from-a-common-directory/

    【讨论】:

      【解决方案4】:

      编辑:查看view helper in zend framework,使用 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

      【讨论】:

        【解决方案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/"
                      }
                    }
        

        【讨论】:

        • 您的解决方案非常有效!我为整个应用程序使用助手,为每个模块使用助手!这就是我要找的! ;)
        猜你喜欢
        • 1970-01-01
        • 2011-03-25
        • 1970-01-01
        • 2012-06-30
        • 2012-06-02
        • 1970-01-01
        • 2011-07-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多