gpt4 book ai didi

php - Zend setElementsBelongTo() 对子表单元素的影响

转载 作者:可可西里 更新时间:2023-10-31 22:50:26 26 4
gpt4 key购买 nike

我在子表单($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() 而不必从该子表单的层次结构的根部调用时,它就起作用了。

最佳答案

我不熟悉 但从它的外观来看,表单层次结构是隐式的。我的意思是您在使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com