【发布时间】:2011-11-27 07:29:57
【问题描述】:
我宁愿不处理装饰器,因为我的表单设计并不完全直截了当,但我想保留验证表单的功能。
所以我在子表单正常工作的地方设置了它,但是当我尝试在我的视图脚本中手动设置它的样式时,我得到了没有父表单的名称。我看过其他类似的帖子,但我没有找到解决方案。
例子:
这是我认为的脚本
<?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 部分?
谢谢!
编辑
好的,所以我找到了一种方法。
通过使用belongTo,它可以工作:
$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,}$/'))
)
))
));
有没有更好的方法或者这是唯一的方法?
编辑2
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装饰器吗? -
Zend: ViewScript decorator and array notation 的完全相同的副本。这是过去几个小时发布的关于该主题的第二个问题,很奇怪
-
@fireeyedboy 不,我会用我正在使用的内容更新我的帖子。我是 Zend 的新手,所以我现在还不知道装饰器是如何工作的。
-
@Phil 不完全是,我没有元素数组。它现在只是一个文本框。但它不会添加验证所需的父表单名称。
-
@Matt 答案(由 fireeyedboy 指出)是一样的
标签: html forms zend-framework