我宁愿不处理装饰器,因为我的表单设计并不是直截了当,但我想保留验证表单的功能。Zend子窗体视图脚本渲染
所以我建立了子窗体工作正常的地方,但是当我尝试在我的视图中手动设置样式时,我得到了没有父窗体的名称。我见过其他类似的帖子,但我还没有找到解决方案。
例子:
这在我看来是脚本
<?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;
}
的['PrepareElements'(http://framework.zend.com/manual/en/zend.form.standardDecorators.html#zend.form.standardDecorators.prepareElements)装饰者的形式? –
[Zend:ViewScript装饰器和数组表示法]的完全重复(http://stackoverflow.com/questions/7155047/zend-viewscript-decorator-and-array-notation)。这是关于这个主题在过去几个小时发布的第二个问题,很奇怪 – Phil
@fireeyedboy没有,不适更新我的帖子与我正在使用。我是Zend的新手,所以我不知道装饰者现在是如何工作的。 – Matt