Function Zend Framework是一个用于放置函数的公共文件,可以从视图中访问

Function Zend Framework是一个用于放置函数的公共文件,可以从视图中访问,function,zend-framework,view,Function,Zend Framework,View,我需要有一个地方来放置各种视图脚本将使用的一些常用函数,例如通过传递变量来创建一些html。我知道如何使用助手,但我希望能够将许多函数放入其中,而不仅仅是每个函数一个助手。 这是我需要创建的插件吗 谢谢听起来你想要的是 如果您不想使用帮助程序(包括部分帮助程序),您最好创建一些全局函数,将它们粘贴到某个文件中,并从引导文件中包含它。Hm,“听起来有点臭”。这些是什么样的功能?如果你的设计是好的,你不应该有这种垃圾箱类的需要。如果它真的是关于视图的,那么您应该创建视图助手、视图部分或部分循环 视图

我需要有一个地方来放置各种视图脚本将使用的一些常用函数,例如通过传递变量来创建一些html。我知道如何使用助手,但我希望能够将许多函数放入其中,而不仅仅是每个函数一个助手。 这是我需要创建的插件吗


谢谢

听起来你想要的是


如果您不想使用帮助程序(包括部分帮助程序),您最好创建一些全局函数,将它们粘贴到某个文件中,并从引导文件中包含它。

Hm,“听起来有点臭”。这些是什么样的功能?如果你的设计是好的,你不应该有这种垃圾箱类的需要。如果它真的是关于视图的,那么您应该创建视图助手、视图部分或部分循环

视图辅助对象无疑是最佳选择。可以使用视图辅助对象的简单设计模式对类似或相关函数的集合进行分组:

class App_View_Helper_Example extends Zend_View_Helper_Abstract
{
    /**
     * @param  mixed|null $var
     * @return App_View_Helper_Example 
     */
    public function example($var = null)
    {
        if ($var === null) {
            return $this;
        }
        return $this->function1($var); // shortcut to method most used
    }

    public function function1($var)
    {
        return $this->view->escape($var);
    }

    public function function2($var1, $var2)
    {
        return $this->view->escape(sprintf('%s: %d', $var1, $var2));
    }

    // and so on... 
}
这允许您在视图中调用助手方法,如下所示:

$this->example($var);
$this->example()->function1($var);
$this->example()->function2($var1, $var2);
$formVars=$this->formVars();
$html.=$formVars->openFormFieldGroup('General');
我在Google静态地图助手中使用了这种方法,它提供了一个
centered()
-方法来显示以给定位置为中心的地图,以及一个
byMarkers()
-方法来显示自动居中并围绕给定标记列表缩放的静态地图


您可能遇到的唯一问题是在不同的视图脚本(例如,当使用布局或部分时)中保持辅助对象的状态,因为将使用每个视图脚本重建辅助对象。要跨这些边界存储状态,您必须求助于
Zend_注册表
或某个静态成员字段。

如果您不需要“一堆助手”(正如其他海报所建议的,这并不是那么糟糕),您可以扩展Zend_视图,添加成员方法,然后将Viewrenderer设置为扩展视图


谢谢大家的建议。 我发现您可以使用视图助手(如Stefan所说)存储更多函数,只需从中返回$this,如:

class Zend_View_Helper_FormVars
{


    public function formVars(){

        return $this;

    }

    public function openFormFieldGroup($name=''){

        $html='';
        $html.='<div id="formFldGrpWrapper">';
        $html.='<div id="formFldGrpName"><b>'.$name.'</b></div>';
        return $html;

    }

}
但我也对Justin所说的我可以有一个通用的扩展视图助手感兴趣? 我的所有视图或控制器都可以访问,以执行重复任务,如一些html div/样式等。。。。我该怎么做才能做好准备呢

谢谢

但我也对Justin所说的我可以有一个通用的扩展视图助手感兴趣?我的所有视图或控制器都可以访问,以执行重复任务,如一些html div/样式等。。。。我该怎么做才能做好准备呢

在回答中,你会问这个额外的问题。我的回答也涉及到这一点。
首先,您需要问问自己,为什么希望在一个类中有多个helper函数

一个原因是您保存了额外的类和文件包含。你怎么能这样做

如果它们是相关的,则可以将它们放在一个视图辅助对象中。但不要做像这样的事情

$this->htmlWrapper()->wrapParapgraph()->wrapContentBox()
    ->translateFromTo('NL', 'EN');
translateFromTo(…)
与html包装无关

如果要优化Include,可以将常用帮助程序代码放入派生视图类中:

class MyView extends Zend_View
{
    function wrapParagraph() {}
    function otherFunction() {}
}
《zend框架指南》中也提到了此选项作为一种优化手段

请注意,视图帮助程序的可重用性不受将视图帮助程序创建为单独类的选择的影响。如果助手扩展了
Zend\u view\u helper\u Abstract
,则可以自动访问当前视图项目

class My_View_Helper extends Zend_View_Helper_Abstract
{
    function wrapParagraph($content) {
        // do something …
        return $this->someOtherViewHelper();
    }

}
你进一步写道

$formVars=$this->formVars()

这实际上没有意义,因为
Zend_View
每个视图只注册一个视图辅助对象

$formVars=$this->formVars();
$formVars->doOneThing();
$formVars->doSecondThing();
相当于

$this->formVars()->doOneThing();
$this->formVars()->doSecondThing();

单例特性对您设计视图帮助程序的方式有着严重的影响。

它听起来确实有点难闻。听起来他只是想偷懒,所以他不妨定义一些全局函数。这是正确的方法。使用“视图帮助器”可以包含一些要查看的常用函数;)不,他不应该使用部分助手:)请参阅我的下一个答案。注释太小,无法解释这一点。应避免使用静态成员字段来存储实例的状态。我可能会建立一个注册表助手。在这种情况下,Zend_视图将确保注册表是视图上下文中的单例。我仍然对其他想法很好奇,奇怪的是:Zend框架不承认这些用例。