Zend Framework - 按名称的插件未在注册表中找到

8
当我从我的views/scripts/脚本中调用我views/helpers/文件中的函数时,我会收到以下错误消息:

消息:在注册表中找不到名称为'SetBlnCompany'的插件; 使用的路径:My_View_Helper_: /www/zendserver/htdocs/development/application/views/helpers/ Zend_View_Helper_: Zend/View/Helper/:/www/zendserver/htdocs/development/application/views/helpers/

bootstrap.php
protected function _initConfig()
{       
    Zend_Registry::set('config', new Zend_Config($this->getOptions()));
    date_default_timezone_set('America/Chicago');
}

protected function _initAutoload() {     
    $autoloader = new Zend_Application_Module_Autoloader(array(             
        'namespace' => 'My',             
        'basePath'  => dirname(__FILE__),     
    ));
    return $autoloader;
} 

application.ini

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

application/views/helpers/DropdownHelper.php

class Zend_View_Helper_Dropdownhelper extends Zend_View_Helper_Abstract
{
     public $blnCompany = false;

     public function getBlnCompany() {
         return $this->blnCompany;
     }

     public function setBlnCompany($blnCompany) {
         $this->blnCompany = $blnCompany;
     }
}
<?php 
     $this->setBlnCompany(true);
     //...etc...
?>

编辑以添加更多背景信息到我的帖子。

理想情况下,我会使用这个“下拉框助手”类,有一个“获取HTML”的函数,一个“获取javascript”的函数,以及许多setter函数在调用getHtml和getJavascript之前设置选项。


请注意,任何不属于ZF的类别都不应以 Zend_ 开头。这会让人误以为您的视图辅助程序真正内置于ZF中,并增加了自动加载程序的额外查找。 注意:重要提示:必须与Zend Framework库一起部署但不属于标准或额外库(例如应用程序代码或不由Zend分发的库)的代码绝不能以“Zend_”或“ZendX_”开头。 请参阅Zend Framework - 命名约定 - drew010
1个回答

12

你的辅助方法的名称必须与你的方法相同。将Zend_View_Helper_Dropdownhelper更改为Zend_View_Helper_GetBlnCompany,这样它就能正常工作了。别忘了也要更改你的文件名:GetBlnCompany.php

要使用代理方法,只需要return $this;

// /application/views/helpers/helpers/GetBlnCompany.php
class Zend_View_Helper_GetBlnCompany extends Zend_View_Helper_Abstract
{    
    public function getBlnCompany() 
    {
        return $this;
    }

    public function fooBar($blnCompany)
    {
        return ucfirst($blnCompany);
    }
}

接下来,您需要按照以下方式调用您的视图助手:

$this->getBlnCompany()->fooBar('google');
//return "Google"

一个帮助器只能有一个公开可用的函数吗? - adam
最好使用“下拉菜单助手”类,以便拥有一个“获取HTML”的函数、一个“获取JavaScript”的函数,以及在调用getHtml和getJavascript之前设置选项的许多setter函数。 - adam
+1 对于文件名建议。当在 Mac(大小写不敏感的文件系统)上开发的代码部署到 Linux 上时,出现了这个错误。 - txyoji

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