Zend表单 - populate()和setDefaults()

8

假设我有一个表单,用于收集名字和姓氏:

$first_name = new Zend_Form_Element_Text('first_name');
$first_name->setLabel("First Name")
    ->setRequired(true);

$last_name = new Zend_Form_Element_Text('last_name');
$last_name->setLabel("Last Name")
    ->setRequired(true);

$form = new Zend_Form();
$form->addElement($first_name)
    ->addElement($last_name)

如果我想在表单上使用"populate($data)"或"setDefaults($data)"方法,数组需要如何组织?这些函数期望什么样的数组?我在文档中没有找到这些信息。
此外,我知道我可以在创建元素时设置值,但这不是我所需要的。
4个回答

14

form->populate()方法接受一个数组,其中键是表单字段的名称。

Zend_Db_Table_Row对象实现了toArray()方法,可以在此处使用(许多其他对象也是如此)。因此,您可以执行以下操作:

$form = new MyForm;

$table = new MyTable;
$rowset = $table->find($id);
$row = $rowset->current();

$form->populate($row->toArray());

2
+1 如果提供一个常见的用例,我会说在大多数情况下 populate() 函数都会使用这个参数。 - Niels Bom

13

数组的键是字段名称,数组的值是字段值。

$data = array( 'first_name' => 'Mickey', 'last_name' => 'Mouse' );

8
FYI - 在Zend_Form中,$form->populate($data)只是调用$form->setDefaults($data)的一个方法。

2
不时查看Zend Framework源代码可以很有教育意义。有些部分非常复杂,但实际上大部分都是可以理解的。 - Niels Bom

1
简单地说,创建一个数组。
$data = array('nameInput'=> 'your value');

将您的表单添加到视图中。
$this->view->form = $form;

然后您向表单添加数据。
$form->populate($data);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接