【问题标题】:zend framework cannot find helper view file. Get 'Plugin by name was not found' errorzend 框架找不到帮助视图文件。获取“未找到按名称的插件”错误
【发布时间】:2012-03-31 06:54:24
【问题描述】:

我试图简单地使用位于 /library/my/view/helpers/friends.php 的自定义视图助手

我在application.ini有这个:

resources.view.helperPath.My_View_Helper = "/my/view/helpers"

这是辅助类:

class My_View_Helper_Friends extends Zend_View_Helper_Abstract {
    public function friends() {
        $str = "hello world";
        return $str;
    }
}

这是在视图文件中:

<?php echo $this->friends(); ?>

我在这一行收到一条错误消息,提示它无法在它所在的路径中找到插件。

错误:

在注册表中找不到名为“朋友”的插件;使用的路径: My_View_Helper_: /My/View/Helpers/ Zend_View_Helper_: Zend/View/Helper/;C:/http/xampplite/htdocs/zf-tutorial/application/views\helpers/

看起来它使用了正确的路径并且文件在那里。不明白为什么找不到?

【问题讨论】:

  • 我一直必须使用$this-&gt;helper() 才能使其工作。此外,我的视图助手都是Zend_View_Helper_MyHelper(也许可以尝试重命名)虽然我没有将它们放在库中,但我将它们保存在/views/helpers 中以保持简单。您没有提及是否将autoloaderNamespaces[] = MY_ 添加到您的application.ini 中。不确定这是否是一个因素。
  • @RockyFord 可能你总是必须使用$this-&gt;helper(),因为你将你的类命名为Zend_View_Helper_XXX(如果我没看错的话)。只有正式属于 ZF 的类才应以Zend_ZendX_ 为前缀(请参阅ZF Naming Conventions)。这可能与自动加载器在 Zend 目录中查找帮助程序类有关。
  • @drew010 我应该说$this-&gt;MyHelper() 前缀为Zend_View_Helper_XXX 是默认设置。所以我不必注册新的辅助路径。它们存储在我的任何/views/helpers 目录中。有一天,当我清理应用程序时,我会将它们全部放在一个地方。自从我发布以来,这个问题也被清理了,所以我的帖子没有意义了:)
  • 我也尝试将 Friends 助手放在 /application/views/helpers/ 中,但仍然出现相同的错误。我将这个类重命名为 Zend_View_Helper_Friends。我必须在帮助文件中包含任何内容吗?

标签: php zend-framework zend-view


【解决方案1】:

我认为问题在于使用了不正确的路径。

...使用的路径:My_View_Helper_: /My/View/Helpers/

注意路径是/My/View/Helpers。它使用的是绝对路径。另一个问题是文件夹应该命名为Helper 而不是helpers

然后将application.ini 中的配置行更改为:

resources.view.helperPath.My_View_Helper = APPLICATION_PATH "/../library/my/view/helper"

并确保您的类名为My_View_Helper_Friends,文件名为Friends.php。案件很重要。该目录实际上应该称为 My/View/Helper 并带有大写字母。

编辑:假设library 在您的include_path 中,您也可以使用以下行:

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

注意它没有前导/。这将在您的 include_path 中的所有位置搜索文件夹 My/View/Helper

【讨论】:

  • 我完全按照您对第一个选项的建议进行了操作。添加该路径常量,将我的目录名称大写并确保帮助程序类名称正确。现在我收到此错误:在注册表中找不到名为“朋友”的插件;使用的路径: My_View_Helper_: C:\http\xampplite\htdocs\zf-tutorial\application../library/my/view/helper/ Zend_View_Helper_: Zend/View/Helper/;C:/http/xampplite/htdocs/zf-教程/应用程序/视图\helpers/
  • 我使用的是 Windows 7。请注意,应用程序常量正在吐出反斜杠,而路径的其余部分是正斜杠。我认为这就是问题所在。看起来 application.ini 中使用该常量的所有路径都是混合正斜杠和反斜杠。
  • 如果实际的目录名称是大写,为什么 appliation.ini 中的路径全是小写?在这一点上,我不关心命名约定。什么是有效的。
  • 在我给你的第一行 application.ini 的情况下,我留下了一个斜线。它应该是resources.view.helperPath.My_View_Helper = APPLICATION_PATH "/../library/my/view/helper",现在反映在帖子中。看看这是否适合你。鉴于我的原始示例导致C:\http\xampplite\htdocs\zf-tutorial\application../library/my/view/helper/,路径仍然不正确
  • 现在我收到此错误:在注册表中找不到名为“朋友”的插件;使用的路径: My_View_Helper_: C:\http\xampplite\htdocs\zf-tutorial\application/../library/my/view/helper/ Zend_View_Helper_: Zend/View/Helper/;C:/http/xampplite/htdocs/zf -教程/应用程序/视图\helpers/。这条路径看起来很奇怪,正斜杠和反斜杠。这是如何运作的?我在某处读到了有关将“My_”添加到自动加载器的信息。在 .ini 中尝试了 autoloaderNamespaces[] = "My_" 也没有成功。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-06
  • 1970-01-01
  • 1970-01-01
  • 2012-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多