Php Zend窗体视图辅助程序

Php Zend窗体视图辅助程序,php,zend-framework,zend-form,zend-form-element,Php,Zend Framework,Zend Form,Zend Form Element,我已经构建了一个视图帮助器,它将构建一个复选框标签和输入。我遇到的问题是,复选框值被忽略 我的表单元素如下所示: require_once 'Zend/Form/Element/Xhtml.php'; class Core_Form_Element_Other extends Zend_Form_Element_Xhtml { public $helper = 'formOther'; public function isValid ($value, $context =

我已经构建了一个视图帮助器,它将构建一个复选框标签和输入。我遇到的问题是,复选框值被忽略

我的表单元素如下所示:

require_once 'Zend/Form/Element/Xhtml.php';

class Core_Form_Element_Other extends Zend_Form_Element_Xhtml
{

    public $helper = 'formOther';

    public function isValid ($value, $context = null)
    {
        return parent::isValid($value, $context);
    }

    public function getValue()
    {
        return parent::getValue();
    }
}
视图辅助对象是:

class Core_View_Helper_FormOther extends Zend_View_Helper_FormElement
{

    public function formOther($name, $value = null, $attribs = null)
    {
        $labelStyle = '';
        $label = '';
        $checkboxAttrib = array('checked' => 1,'unchecked' => 0);
        $textAttrib = array('size' => 10);

        foreach ($attribs as $k => $v)
        {
            $a = str_replace(array('text-', 'checkbox-'), '', $k);
            if (strpos($k, 'text-') !== false)
            {
                $textAttrib[$a] = $v;
            }
            if (strpos($k, 'checkbox-') !== false)
            {
                $checkboxAttrib[$a] = $v;
            }
        }

        $textValue = '';
        $checkboxValue = $checkboxAttrib['unchecked'];
        if (!empty($value))
        {
            $checkboxValue = $checkboxAttrib['checked'];
            $textValue = $value;
        }

        if (isset($attribs['checkboxLabel']))
        {
            $label = $attribs['checkboxLabel'];
        }
        if (isset($attribs['checkboxLabelStyle']))
        {
            $labelStyle = $attribs['checkboxLabelStyle'];
        }

        return $this->view->formCheckbox($name.'_check', $checkboxValue, null, $checkboxAttrib)
            . ' <label style="'. $labelStyle .'">'. $label .'</label> '
            . $this->view->formText($name, $textValue, $textAttrib);
    }
}

你所说的“on populate”到底是什么意思?如果在未选中复选框的情况下提交表单时缺少值,则这是默认的html行为

在任何时候,是否使用“checked=”checked“属性设置复选框本身?复选框的值和复选框的值是不同的

在我看来,使用定制装饰器是设计zend表单最错误的方式。从zend输出默认html,使用jQuery使表单标签美观。Zend表单在很多方面都很好,但风格和安排不在其中

$other = $this->createElement('Other', 'otherElem')
            ->setAttrib('checkboxLabel', 'Other')
            ->setAttrib('checkbox-checked', 'yes')
            ->setAttrib('checkbox-unChecked', 'no')
            ->setAttrib('checkboxLabelStyle', 'font-weight:normal;padding-right:0px;')
            ->setAttrib('text-size', 20)
            ->setDecorators(array(
                'ViewHelper',
                array('Errors', array('class' => 'error small', 'placement' => Zend_Form_Decorator_Abstract::PREPEND)),
                array('htmlTag', array('tag' => 'div', 'class' => 'span-8 last'))
            ));
        $this->_telements[] = $other;