【问题标题】:Zend Forms - populate() and setDefaults()Zend Forms - populate() 和 setDefaults()
【发布时间】:2009-08-19 18:45:11
【问题描述】:

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

$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)”方法,需要如何组织数组?这些函数期望什么样的数组?我无法在文档中找到此信息。

另外,我知道我可以在创建元素本身时设置值,但这不是我需要的。

【问题讨论】:

    标签: php zend-framework forms


    【解决方案1】:

    form->populate() 方法接受一个数组,其中键是 表单域。

    Zend_Db_Table_Row 对象实现了一个 toArray() 方法,可以使用 这里(和许多其他对象一样)。因此,您可以执行以下操作:

    $form = new MyForm;
    
    $table = new MyTable;
    $rowset = $table->find($id);
    $row = $rowset->current();
    
    $form->populate($row->toArray());
    

    【讨论】:

    • +1 用于提供常见用例。我会说在大多数情况下 populate() 是用这个参数调用的。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      仅供参考 - 在 Zend_Form 中,$form->populate($data) 只需调用 $form->setDefaults($data)

      【讨论】:

      • 不时查看一下 Zend Framework 源代码可能很有教育意义。有些部分相当复杂,但很多部分实际上是可以理解的。
      【解决方案4】:

      简单,创建一个数组

      $data = array('nameInput'=> 'your value');
      

      将表单添加到视图中

      $this->view->form = $form;
      

      然后你将数据添加到表单中

      $form->populate($data);
      

      【讨论】:

        猜你喜欢
        • 2012-01-19
        • 2011-02-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-31
        • 1970-01-01
        • 2010-10-12
        • 1970-01-01
        相关资源
        最近更新 更多