Zend Framework Custom表单元素重复出现

时间:2011-03-13 10:19:54

标签: zend-framework forms elements repeat

我有一个奇怪的问题。

我创建了一个自定义表单元素。我创建了两个select-form-elements来选择时间(00:00)。

奇怪的是,当我在表单中使用它一次就可以了,但是当我第二次使用它时(因为约会有开始和结束时间),第一次再次显示。所以我最终得到了三倍的形式元素。当我再次使用它时,它也会显示前两个,最后是表单元素的6倍。

有人知道如何阻止他的发生吗?

守则:

表单元素

<?php

class App_Form_Element_TimeSelect extends Zend_Form_Element_Xhtml
{

    public $helper = 'FormTimeSelect';
    protected $hour = null;
    protected $minutes = null;

    public function setHour($hour)
    {
        $this->hour = $hour;
        return $this;
    }

    public function setMinutes($minutes)
    {
        $this->minutes = $minutes;
        return $this;
    }

    public function setValue($value)
    {
        if (is_array($value)
                && isset($value['hour'])
                && isset($value['minutes']))
        {
            $this->setHour($value['hour'])
                    ->setMinutes($value['minutes']);
        }
    }

    public function getValue()
    {
        if (!$this->hour || !$this->minutes)
            return false;
        return $this->hour . ':' . $this->minutes;
    }

}

视图助手

<?php

class App_View_Helper_FormTimeSelect extends Zend_View_Helper_FormElement {

    protected $html = '';

    public function FormTimeSelect($name, $value = null, $attribs = null)
    {
        $hour = '00';
        $minute = '00';
        if ($value)
            list($hour, $minute) = split(':', $value);

        $helper = new Zend_View_Helper_FormSelect();
        $helper->setView($this->view);

        $hourarray = array('00' => '00', '01' => '01', '02' => '02', '03' => '03',
            '04' => '04', '05' => '05', '06' => '06', '07' => '07', '08' => '08',
            '09' => '09', '10' => '10', '11' => '11', '12' => '12', '13' => '13',
            '14' => '14', '15' => '15', '16' => '16', '17' => '17', '18' => '18',
            '19' => '19', '20' => '20', '21' => '21', '22' => '22', '23' => '23');
        $minutearray = array('00' => '00', '15' => '15', '30' => '30', '45' => '45');

        $this->html .= $helper->formSelect($name . '[hour]', $hour, null, $hourarray);
        $this->html .= ' : ';
        $this->html .= $helper->formSelect($name . '[minutes]', $minute, null, $minutearray);

        return $this->html;
    }

}

谢谢!

彼得

1 个答案:

答案 0 :(得分:1)

这种行为很正常。原因是当您从视图中调用帮助程序时,它只在App_View_Helper_FormTimeSelect的实例上执行formTimeSelect()方法。您需要记住,在Zend应用程序执行期间,只有一个帮助程序实例。因此,在您的代码中,多次从视图中调用帮助程序只会将新的html(FormTimeSelect方法的结果)附加到$ html变量中的现有字符串。如果多次调用该方法,您将看到该字符串的多个版本。因此,只需在$html=''方法的开头重置(FormTimeSelect)$ html的值。

希望这会澄清问题。