Zend子表单视图脚本呈现

时间:2011-09-29 00:11:50

标签: html forms zend-framework

我宁愿不处理装饰器,因为我的表单设计不是很直接,但我想保留验证表单的功能。

所以我设置了子窗体正常工作的位置,但是当我尝试在我的视图中手动设置样式时,我得到的名称没有父窗体。我见过其他相似的帖子,但我还没有找到解决方案。

示例:

这是我的视图脚本

<?php echo $this->form->username->renderViewHelper();?>

然后我得到

<input type="text" value="" id="username" name="username">

渲染时。它应该是

<input type="text" value="" id="form1-username" name="form1[username]">

我如何获得form1部分?

谢谢!


修改

好的,所以我找到了一种方法。

通过使用belongsTo,它可以工作:

    $form1->addElements(array(
        new Zend_Form_Element_Text('username', array(
            'belongsTo' => 'form1',
            'required'   => true,
            'label'      => 'Username:',
            'filters'    => array('StringTrim', 'StringToLower'),
            'validators' => array(
                'Alnum',
                array('Regex',
                      false,
                      array('/^[a-z][a-z0-9]{2,}$/'))
            )
        ))
     ));

有更好的方法可以做到这一点还是这是唯一的方法?


EDIT2

public function prepareSubForm($spec){
    if (is_string($spec)) {
        $subForm = $this->{$spec};
    } elseif ($spec instanceof Zend_Form_SubForm) {
        $subForm = $spec;
    } else {
        throw new Exception('Invalid argument passed to ' .
                            __FUNCTION__ . '()');
    }
    $this->setSubFormDecorators($subForm)
         ->addSubmitButton($subForm)
         ->addSubFormActions($subForm);
    return $subForm;
}

public function setSubFormDecorators(Zend_Form_SubForm $subForm){
    $subForm->setDecorators(array(
        'FormElements', \\<--- I tried to change this to PrepareElements before.
        array('HtmlTag', array('tag' => 'dl',
                               'class' => 'zend_form')),
        'Form',
    ));
    return $this;
}

1 个答案:

答案 0 :(得分:1)

我相信您只需使用以下内容即可获得所需的输出:

<?php echo $this->form->username; ?>

在没有renderViewHelper的情况下调用它时,我得到了预期的输出。这也没有任何装饰器或准备子表单的特殊代码。我所要做的就是将belongsTo添加到表单元素中。

更新:

如果将此设置为默认装饰器,则可以从渲染中消除dd / dt标记,而不是使用div。然后您可能更接近获得所需的自定义输出。您可以将tag中的HtmlTagdiv更改为您希望包含元素的任何标记。这是我主要使用的内容:

array(
    'ViewHelper',
    'Errors',
    array('Description', array('tag' => 'p', 'class' => 'description')),
    array('HtmlTag', array('tag' => 'div', 'class' => 'form-div')),
    array('Label', array('class' => 'form-label', 'requiredSuffix' => '*'))
);

这是Zend Framework的默认设置:

array(
    'ViewHelper',
    'Errors',
    array('Description', array('tag' => 'p', 'class' => 'description')),
    array('HtmlTag', array('tag' => 'dd', 'id' => array('callback' => $getId)))
    array('Label', array('tag' => 'dt'))
);

请注意,file和submit / button元素使用不同的装饰器。

另见this answer