我寧願不處理裝飾器,因爲我的表單設計並不是直截了當,但我想保留驗證表單的功能。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