- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我在子表单($requestSubform)中有一个子表单($fileUploadSubform)。我在父子表单 ($requestSubform) 上调用了 setElementsBelongTo("requestRow[$rowNumber]")。
$requestSubform= new Zend_Form_Subform();
$requestSubform->setElementsBelongTo("requestRow[$rowNumber]");
// add elements to $requestSubform
// now create the file upload subform
$fileUploadSubform= new Zend_Form_SubForm();
$fileUploadSubform->addElement('file', 'fileName')
->setLabel('File');
$fileUploadSubform->addElement('text', 'fileDesc')
->setLabel('File Description');
$requestSubform->addSubForm($fileUploadSubform, 'fileUpload');
$this->view->field = $requestSubform->__toString();
// pass it as json via ajax back to javascript
表单渲染时,$fileUploadSubform fileDesc元素的name和id如下
name="requestRow[1][requestRow][1][fileUpload][fileDesc]"
id="requestRow-1-fileUpload-fileDesc"
为什么我在 setElementsBelongTo() 函数中设置的值重复了两次?
提前致谢!
[2015 年 8 月 13 日更新]
作为临时解决方法,我只是从子子表单($fileUploadSubform)而不是父子表单($requestSubform)调用 setElementsBelongTo()
[2015 年 8 月 17 日更新]
我尝试了从 http://zend-framework-community.634137.n4.nabble.com/Improved-array-support-for-Zend-Form-td667215.html 获得的以下代码正如在那篇文章中所说,子表单 elementsTobelong 工作正常。
$form = new Zend_Form();
$form->setElementsBelongTo('foobar');
$form->addElement('text', 'firstName')
->getElement('firstName')
->setLabel('First Name')
->setRequired(true);
$form->addElement('text', 'lastName')
->getElement('lastName')
->setLabel('Last Name')
->setRequired(true);
$subForm = new Zend_Form_SubForm();
$subForm->setElementsBelongTo('foobar[baz]');
$subForm->addElement('text', 'email')
->getElement('email')
->setLabel('Email Address');
$subSubForm = new Zend_Form_SubForm();
$subSubForm->setElementsBelongTo('foobar[baz][bat]');
$subSubForm->addElement('checkbox', 'home')
->getElement('home')
->setLabel('Home address?');
$subForm->addSubForm($subSubForm, 'subSub');
$form->addSubForm($subForm, 'sub')
->addElement('submit', 'save', array('value' => 'submit'));
print_r($form->__toString());
但这是我为 $subForm 和 $subFubForm 的元素得到的。
<input id="foobar-foobar-baz-email" type="text" value="" name="foobar[foobar][foobar][baz][email]">
<input id="foobar-foobar-baz-foobar-baz-bat-home" type="checkbox" value="1" name="foobar[foobar][foobar][baz][foobar][foobar][baz][foobar][baz][bat][home]">
[2015 年 8 月 24 日更新]
我终于找到问题了。
就是这条线
$this->view->field = $additionalInfoSubform->__toString();
有些元素之前没有显示,这就是我添加该行的原因。直到现在我才明白那些没有显示的元素是那些没有设置 ViewHelper 装饰器的元素。因此,当我将 ViewHelper 设置为装饰器并删除上述字段并调用子表单的 setElementsBelongTo() 而不必从该子表单的层次结构的根部调用时,它就起作用了。
最佳答案
我不熟悉 zend-framework但从它的外观来看,表单层次结构是隐式的。我的意思是您在使用 setElementsBelongTo()
时不必声明完整的“路径”。将其视为文件夹结构,您只需命名当前工作目录中的子文件夹即可。
所以当你声明时:
$form = new Zend_Form();
$form->setElementsBelongTo('foo');
$subForm = new Zend_Form_SubForm();
$subForm->setElementsBelongTo('bar');
$subForm->addElement('text', 'email')
$form->addSubForm($subForm, 'sub');
这被解释为将 email
放入 bar
并将 bar
放入 foo
,又名:
name="foo[bar][email]"
文档说:
setElementsBelongTo (line 1367)
Set name of array elements belong to
access: public
Zend_Form setElementsBelongTo (string $array)
string $array
来自 http://framework.zend.com/apidoc/1.9/Zend_Form/Zend_Form.html#setElementsBelongTo
还有:
Zend_Form::setElementsBelongTo($array)
Using this method, you can specify the name of an array to which all elements of the form belong. You can determine the name using the getElementsBelongTo() accessor.
来自 http://framework.zend.com/manual/1.12/en/zend.form.advanced.html
措辞可能有点不清楚,但它可能支持我的理论。因此,当使用 $form->setElementsBelongTo('foo')
时,添加到 $form
的任何内容都将隐式成为 foo
的元素,因此 foo
必须排除在处理子元素的后续 setElementsBelongTo()
调用之外。
关于php - Zend setElementsBelongTo() 对子表单元素的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31956901/
我在子表单($requestSubform)中有一个子表单($fileUploadSubform)。我在父子表单 ($requestSubform) 上调用了 setElementsBelongTo(
我是一名优秀的程序员,十分优秀!