在Zend Framework中使用Zend_Form的表单上的可变字段数

问题描述

| 我有一个数据库表和一个链接表\“ site \”在第一个中定义,在第二个中,可以添加一个到多个变化的多个值,这些值指向\“ site \”。用户可以使用带有链接数据的表单打开\“ site \”字段,然后在字段中显示,以便用户可以编辑值。 例如“网站一”具有一个相关字段。 “站点二”具有三个相关字段。 “站点三”具有两个相关的字段。 等等。 如果我要手动启动它,我只会读取数据并创建额外的字段,但是我正在使用Zend_Form构建它,它似乎想提前知道字段的数量。我在models目录中使用了一个模型,在scripts目录中使用了_form_xxx.phtml(部分?)。 我对Zend并不熟悉,所以有点感觉,所以Zend_Form是否有办法做到这一点,否则我似乎不得不重写PHP和phtml了? 子表单Zend_Form_SubForm是可行的吗? 由于Zend是灵活的,我认为在最坏的情况下我可以用普通的香草方式编写组件,但如果可能的话,我想在框架中使用这些工具。     

解决方法

是什么让您认为Zend_Form应该是静态的?您可以根据需要在运行时在表单内部动态创建字段。只需将添加动态表单元素的逻辑放入表单类的构造函数中即可(扩展Zend_Form)。 即。
class YourSplendidForm extends Zend_Form
{
    public function __construct($options = null,$yourParams)
    {
        parent::__construct($options);

        $this->setName(\'your_form_name\');
        $this->setAction(\'/your/form/action/\');

        // Add your fields here using addElement - or create a subform and add fields to that one and use addSubForm to add the subform


    }
}
然后只需将表单实例(从控制器)传递到视图并根据需要进行处理(通过简单的“ 1”或您认为合适的自定义渲染)即可。