【问题标题】:Zend: Custom View helpersZend:自定义视图助手
【发布时间】:2013-04-29 12:17:15
【问题描述】:

我正在尝试在我的项目中添加一个视图助手,但我收到以下错误:

[Mon Apr 29 14:36:19 2013] [error] [client 10.0.0.26] PHP Fatal error:  Uncaught exception 'Zend_Loader_PluginLoader_Exception' with message 'Plugin by name 'LoggedInAs' was not found in the registry; used paths:\nMy_View_Helper_: /var/www/html/test-project/application/views/helpers/\nZend_View_Helper_: Zend/View/Helper/:/var/www/html/test-project/application/views/helpers/' in /usr/share/php/Zend/Loader/PluginLoader.php:412\nStack trace:\n#0 /usr/share/php/Zend/View/Abstract.php(1182): Zend_Loader_PluginLoader->load('LoggedInAs')\n#1 /usr/share/php/Zend/View/Abstract.php(618): Zend_View_Abstract->_getPlugin('helper', 'loggedInAs')\n#2 /usr/share/php/Zend/View/Abstract.php(344): Zend_View_Abstract->getHelper('loggedInAs')\n#3 /var/www/html/test-project/application/layouts/scripts/layout.phtml(16): Zend_View_Abstract->__call('loggedInAs', Array)\n#4 /var/www/html/test-project/application/layouts/scripts/layout.phtml(16): Zend_View->loggedInAs()\n#5 /usr/share/php/Zend/View.php(108): include('/var/www/html/t...')\n#6 /usr/share/php/Zend/View/Abstract.php(888): Zend_View->_run('/var/www/html/ in / /usr/share/php/Zend/Controller/Plugin/Broker.php on line 336

application/views/helpers/LoggedInAs.php

class My_View_Helper_LoggedInAs extends Zend_View_Helper_Abstract
{
    public function loggedInAs()
    {
        //code
    }
}

application/configs/application.ini

resources.view[]=
resources.view.helperPath.My_View_Helper = APPLICATION_PATH "/views/helpers"

application/layouts/scripts/layout.phtml

echo $this->loggedInAs();

stackoverflow 上还有其他几个问题,但这些对我没有用。

编辑 1: 在 Tim Fountain 回答后将 Zend_View_Helper_LoggedInAs 更改为 My_View_Helper_LoggedInAs 编辑 2: 完全错误

【问题讨论】:

    标签: zend-framework zend-view


    【解决方案1】:

    您提供的答案似乎没有多大意义,如果您说您在编写类的文件顶部添加了<?php,我只能说“欢迎使用 PHP!” 否则,以下内容可能会在未来有所帮助......或者没有。

    使用来自feibeck的大师application.ini作为参考,我想出了:

    //excerpt from application.ini
    resources.view.helperPath = APPLICATION_PATH "/views/helpers"
    resources.view.helperPathPrefix = "My_View_Helper"
    

    但是,您使用的是 MVC 的默认设置,因此您根本不需要任何配置。

    这可能是配置过多的情况。

    话虽如此: 我从来都不喜欢在application.ini 中设置视图选项,因为我不太确定我应该期待什么效果(我是在添加还是设置一个选项?)。我更喜欢在引导程序中设置视图,因为使用的大多数方法都更冗长并且讲述了更完整的故事:

    //bootstrap.php
    protected function _initView()
        {
            //Initialize view
            $view = new Zend_View();
            //add custom view helper path
            $view->addHelperPath(APPLICATION_PATH . '/../library/My/View/Helper');
            //add custom script path for partials
            $view->addScriptPath(APPLICATION_PATH . '/../library/My/View/Scripts/');
            //set css includes, path is relative to /public
            $view->headlink()->setStylesheet('/bootstrap/css/bootstrap.css');
            //add javascript files, path is relative to /public
            $view->headScript()->setFile('/bootstrap/js/jquery.min.js');
            $view->headScript()->appendFile('/bootstrap/js/bootstrap.min.js');
            //add it to the view renderer
            $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper(
                    'ViewRenderer');
            $viewRenderer->setView($view);
            //Return it, so that it can be stored by the bootstrap
            return $view;
        }
    

    希望这能提供一些帮助。

    【讨论】:

    • 是的,我知道,愚蠢的是我没想到。我已经用 PHP 编码几年了,但现在我正在学习 ZF,我很困惑;)
    • 别让 ZF 把你搞糊涂了,它只是 PHP。 (提示提示):)
    【解决方案2】:

    类名应该是My_View_Helper_LoggedInAs,因为这是您在application.ini 中声明的命名空间。 Zend 命名空间仅适用于 ZF 类。

    【讨论】:

    • 您可以编辑您的问题以包含完整的错误吗?它还应该列出它尝试过的路径和命名空间
    • 好的,老实说,您发布的所有内容看起来都不错。你能仔细检查一下类的文件名确实是 LoggedInAs.php(区分大小写)吗?
    【解决方案3】:

    我用一个奇怪的解决方案修复了它,因为我在互联网上找不到类似的东西。 我刚刚在 application/views/helpers/LoggedInAs.php

    的开头添加了<?PHP

    【讨论】:

      猜你喜欢
      • 2012-06-02
      • 2012-12-21
      • 1970-01-01
      • 2011-01-12
      • 2012-07-08
      • 1970-01-01
      • 2015-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多