【问题标题】:Adding more functions to helper classes in zend在 zend 中向辅助类添加更多功能
【发布时间】:2026-01-11 15:20:03
【问题描述】:

这是我的助手类

class Zend_View_Helper_CommonArea extends Zend_View_Helper_Abstract {

    public function commonArea()
    {
        ?>

        <div class="clear"></div>
        <div id="quick_search">
            <div class="search">
                        <strong>QUICK SEARCH </strong>

                    <input type="text" name="keyword" id="keyword" value="Enter keywords" class="form" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;" />
                <select name="select" id="select" class="selectstyled">
                    <option>Prefered Location</option>
                    <option>Prefered Location</option>
                    <option>Prefered Location</option>
                    <option>Prefered Location</option>
                    <option>Prefered Location</option>
                </select>
            </div>
            <div class="bt_box">
                <input name="find" type="submit" class="find" id="search"  value="Find Jobs" />
            </div>
            <div class="resume"><a href="jobseeker.html"><img src="images/resume.jpg" alt="" /></a></div>
        </div>


        <?php
    }
}

我的问题是,我需要在这个类中添加一个新函数。我尝试过添加新功能,例如

public function addBox()
    {
        ?>
        <div id="add_right_box"style="height:500px;"><h3 class="add_h2">Width 210px</h3></div>
        <?php
    }

到上面的课程,但我遇到了类似的错误 在注册表中找不到名为“AddBox”的插件;

这里我需要知道我可以向助手类添加更多功能吗,如果可以,这怎么可能。

【问题讨论】:

    标签: layout view helper zend-framework


    【解决方案1】:

    首先,您应该返回所有输出,而不是直接回显。

    来自Zend_View_Helper docs

    一般来说,类不应回显或打印或以其他方式生成输出。相反,它应该返回要打印或回显的值。返回的值应适当转义。

    当你从视图调用$this-&gt;commonArea()时,它会加载'CommonArea'类,然后调用匹配方法。因此,调用 $this-&gt;addBox() 将查找“AddBox”类 - 它不会知道您希望它成为“CommonArea”插件的一部分。

    如果你想从同一个插件调用多个方法,让匹配的方法返回插件的一个实例:

    public function commonArea(){
      return $this;
    }
    

    然后像这样调用方法:

    $this->commonArea()->addBox();
    $this->commonArea()->display(); //assuming you renamed the original method to 'display'
    

    您可以查看navigation helperplaceholder helper 来了解这种模式。

    【讨论】: