如何在zend中创建表单

时间:2011-06-11 20:08:23

标签: php zend-framework forms

我正在关注this线程来创建一个表单,并且当表单元素的数量已知时它正在工作。现在我必须根据用户选择创建表单字段。

例如:

<?php 

class Form_MyForm extends Zend_Form {

   public function __construct( $options = null ) {

        parent::__construct( $options );

        // Set the method for the display form to POST
        $this->setMethod('post');

        $elements = array();

        // Get user input to create elements
        $fields = $options['columns'];

        // Create form elements
        for( $i = 0; $i < count( $fields ); $i++ ) {
            $element = $this->CreateElement('text', 'field'.$i );
            $element->setLabel( $fields[$i]['name'] );
            $elements[] = $element;
        }

        $this->addElements( $elements );
        $this->setElementDecorators( array( 'ViewHelper' ) );
        $this->setDecorators( array( array( 'ViewScript', array( 'viewScript' => 'myform-form.phtml' ) ) ) );

    } // end construct


} // end class
?>

I can render each element separately但现在我不知道如何通过循环在myform-form.phtml中呈现这些元素。我必须循环,因为No. Fields在开头就不知道了。

由于

2 个答案:

答案 0 :(得分:1)

应该使用这样的东西 (没试过)

<?
foreach ($this->element->getElements() as $element){
    echo $this->{$element->helper}(
        $element->getName(), 1, $element->getAttribs()
    )
}
?>

$this->element应该是您的表格

答案 1 :(得分:0)

开始的旁注:通常在init()方法中执行所有操作而不是覆盖表单构造函数。但那并不是什么大不了的事。

Re:使用ViewScript装饰器的视图脚本渲染字段:在myform-form.phtml中,似乎可以调用$this->getOption('columns')然后执行foreach循环来渲染元素,类似于用于创建字段的循环。