【问题标题】:Zend: How to use a custom function from a view helper in the controller?Zend:如何从控制器中的视图助手中使用自定义函数?
【发布时间】:2010-02-28 22:54:05
【问题描述】:

我在library/my/view/helper/gravatar 中有一个视图助手,所以在任何视图中我都可以调用$this->gravatar($email)

但是如何在模型(或控制器)中访问此功能?

很抱歉,如果它已经被问过,但我是新的,并且文档的某些部分非常糟糕。

谢谢大家

【问题讨论】:

    标签: php zend-framework models


    【解决方案1】:

    在您的控制器中,您可以通过以下方式访问 ViewHelpers

    $this->view->gravatar($email)
    

    您的模型不应从视图调用方法,因为它会将模型绑定到表示层。 View 可能知道模型,但模型不应该知道 View。

    对于 Gravatars,还有一个服务和视图助手正在制作中:

    【讨论】:

    • 那么这个gravatar功能应该去哪里呢?它需要在我的模块化网站的某些部分中可用
    • @bluedaniel 在不了解您的应用的情况下无法分辨。如果您确定在模型中需要它,例如作为域逻辑的一部分,要么在模型中将 Gravatar 作为服务,要么将 getGravatar() 添加到调用它的类中。
    • 它的模型太多,无法复制/粘贴到每个类中,但它会成为站点范围的服务吗?
    • 您的 ViewHelpers 可以访问模型并要求他们进行各种初步操作。就像你的控制器经常做的那样。但是,模型不应具有视图意识,因为这会降低它们的灵活性。例如如果您还需要为盲文显示器格式化您的 gravatar,如果您将视图格式化放在模型中,您将无法正确执行此操作,会发生什么情况。该模型应仅提供盲文 ViewHelper 生成其输出所需的数据。
    • 这就是 ViewHelpers 的观​​点。允许您将所需的所有 presentational 逻辑放入方法中,然后在视图中简单地调用它们。因此,您可以在帮助程序中放置代码来生成菜单、表格、列表等视图项。如果需要,助手可以反过来调用模型获取数据。
    【解决方案2】:

    确定视图中的“事物”实际上是视图助手的更好方法是使用方法getHelper("helperName");

      $this->view->getHelper('gravatar');
    

    【讨论】:

      【解决方案3】:

      在控制器中:

      $this->view->gravatar();
      

      在模型中(Gordon 是对的,你一般不应该这样做):

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

      或者简单地通过 Zend_Registry 共享 Zend_View 实例。如果你没有 View 实例,你可以像 $g = new View_Helper_Gravatar() 一样直接实例化它。要加载它,您可以使用 Zend_Loader_PluginLoader。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-17
        • 2012-06-02
        • 1970-01-01
        相关资源
        最近更新 更多