将新 dhtml内容动态添加到通过Zend_Form生成的表单的最佳方法是什么。例如,表示表单是这样创建的:
class formUser extends Zend_Form {
public function __construct( $options = null ) {
parent::__construct( $options );
$page1 = new Zend_Form_Element_Text( 'page1' );
$page1->setLabel( 'Page 1' );
$submit = new Zend_Form_Element_Submit( 'submit' );
$this->addElements( array( $page1, $submit ) );
}
}
这里表单创建一个且只有一个名为“page1”的元素,但如果我想在视图中引入一个动态生成更多元素的“添加”按钮,如page2,第3页,第4页等,同时将它与Zend_Form集成?
Here is the effect I'm talking about
This isn't me, but he's got the same question and maybe worded it better
在我的情况下,它实际上是一个孩子和父母的关系。在这个区域周围,一个人可能有0或15个孩子,我不会抬起眉毛。
谢谢!
答案 0 :(得分:2)
我现在没有时间详细介绍这个编码的细节,但是我会这样做:
由于您希望表单的结构(而不仅仅是它的数据)是可编辑的,因此您必须将其实例化并将其存储在会话中。
JavaScript不必仅生成一些额外的HTML标记,而是必须向服务器发出Ajax回调。单击“添加”按钮时,以此方式调用的操作将更改会话中的Zend_Form
实例存储。然后,Ajax调用可以返回要插入的附加标记或整个表单标记的新版本。
在前一种情况下,您的JavaScript代码将确保以浏览器显示与服务器上的Zend_Form
表示一致的方式插入标记。在后一种情况下 - 返回整个表单 - 用户输入必须在Ajax调用中传输,否则当表单被新版本替换时它将丢失。
答案 1 :(得分:1)
答案 2 :(得分:0)
完成任务的提示可能是定义一个隐藏的输入,您可以在添加新元素时增加'pageNb'。
然后过滤&验证您的表单,您可以使用循环在控制器中动态创建元素及其验证要求。
类似的东西:
// PHP
$userForm = new formUser();
for ($i = 0; $i < $_POST['pageNumber']; ++$i)
{
$element = new Zend_Form_Element_Text('page' . $i);
$element->addValidator('SomeValidator');
$userForm->addElement($element);
}
if ($userForm->isValid($_POST])
{
// bla bla bla
}
// Javascript
function addNewInput ()
{
pageNb = document.getElementbyId('pageNb').value;
pageNb.value = ++pageNb;
// here put the trick to create a new node/input element.
newElement.id = pageNb.value;
}
答案 3 :(得分:0)
我认为你不需要任何特殊的Zend来解决这个问题 - 你发布的javascript示例会在你想要它的页面中添加html,然后当你提交它时,你会在发布的数据上有你的数据页面都一样。只需确保遵循您在开始时使用的命名方案。你甚至可以使用数组
$element->setIsArray(true);
创建像这样的HTML
name="foo[]" id="foo"