Zend:如何在控制器中使用视图助手中的自定义函数?

6
我在library/my/view/helper/gravatar中编写了一个视图助手,所以在任何视图中都可以调用$this->gravatar($email)
但是我该如何在模型(或控制器)中访问此函数?
对不起,如果已经有人问过了,但我是新手,文档部分非常糟糕。
谢谢大家。
3个回答

7

那么这个 gravatar 函数应该放在哪里呢?它需要在我模块化网站的各个部分中都可用。 - bluedaniel
1
你的ViewHelpers可以访问模型并要求它们执行各种预备操作,就像你的控制器经常做的那样。然而,模型不应该有视图意识,因为这会降低其灵活性。例如,如果你需要为盲文显示器格式化你的Gravatar,如果你把视图格式化放在模型中,你无法正确地完成这个任务。模型应该只提供Braille ViewHelper生成其输出所需的数据。 - Michael Ekoka
啊,好的,我可能把太多的视图放进了模型里。那么关于在循环和if语句中添加HTML呢?视图不应该包含太多逻辑,对吧? - bluedaniel
1
这就是ViewHelpers的作用。它允许您将所有呈现逻辑放入方法中,并在视图中简单地调用它们。因此,您可以在助手中放置用于生成视图项(如菜单、表格、列表等)的代码。如果需要,助手可以反过来调用模型以获取数据。 - Michael Ekoka
@bluedaniel,我认为你应该针对这些问题提出另一个问题。评论区不是讨论这个的好地方。而且原始问题已经得到了充分的回答,我想说。 - Gordon
显示剩余5条评论

1
更好的方法是确保视图中的“thing”实际上是视图助手,可以使用方法getHelper("helperName");
  $this->view->getHelper('gravatar');

0

在控制器中:

$this->view->gravatar();

在模型中(戈登是正确的,一般情况下不应该这样做):

Zend_Controller_Action_HelperBroker::getStaticHelper('ViewRenderer')->getView()->gravatar()

或者通过 Zend_Registry 分享 Zend_View 实例。如果你没有 View 实例,你可以直接实例化它,比如 $g = new View_Helper_Gravatar()。使用 Zend_Loader_PluginLoader 来加载它。


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