Zend framework Zend Framework/Form元素呈现为文本框而不是下拉框

Zend framework Zend Framework/Form元素呈现为文本框而不是下拉框,zend-framework,drop-down-menu,zend-form-element,zend-config,Zend Framework,Drop Down Menu,Zend Form Element,Zend Config,config.ini文件中有以下内容:Zend\u Form\u元素 site_status.name = "site_status" site_status.type = "select" site_status.label = "Status" site_status.options.multiOptions.active.key = "Active" site_status.options.multiOptions.active.value = "Active" site_status.o

config.ini文件中有以下内容:Zend\u Form\u元素

site_status.name = "site_status"
site_status.type = "select"
site_status.label = "Status"
site_status.options.multiOptions.active.key = "Active"
site_status.options.multiOptions.active.value = "Active"
site_status.options.multiOptions.active.key = "Inactive"
site_status.options.multiOptions.active.value = "Inactive"
正如您所看到的,这应该是一个下拉选择框,但是它被渲染为一个标准文本框。我做错了什么

->编辑

我没有将元素绑定到表单,而是尝试将它们绑定到数据库:在我的代码中,它看起来像这样:

[{tablename}] // the table name would represent a section in the ini
{column}.name = "{column_name/form_field_id}";
{column}.type = "{form_element_type}"
{column}.label = "{form_element_label}"
...
从那里,我将引入数据库表,表单将根据需要表示一个或多个表的数据。这种方法的理由是,我想通过ini或其他存储方法定义一个配置文件,它是属于非程序员类型可以轻松编辑的特定表单的字段/元素列表,“通用”表单类将读取、拉入元素信息,并动态创建表单

然而,我确实意识到这带来了另一个我还没有弄明白的问题,那就是如何在不将数据库检索的查找编码到表单中的情况下对选定元素使用表查找,这样非用户就可以轻松地定义它,而无需任何编程,纯配置,但这是另一个话题,不是我问题的一部分。我认为我对这部分问题有可行的想法/解决方案——额外的配置条目和一个通用例程


我希望这能澄清我的思维过程和我为什么会以上述示例中的方式进行此操作的原因。

我还没有使用Zend_配置构建Zend_表单的实例

但是看一下代码就知道Zend_Form::addElement并没有直接将Zend_配置实例作为参数。相反,看起来您需要将Zend_配置实例传递给表单构造函数。为了将配置键映射到setXXX调用,配置格式似乎还需要更深入一些

在路径/to/config/myForm.ini中:

然后实例化:

$formConfig = new Zend_Config_Ini('path/to/config/myForm.ini', 'myForm');
$form = new Zend_Form($formConfig);
未测试,但请看以下示例:

感觉应该是这样的

更新

鉴于@Aaron的评论/反馈,还有两种方法

我们可以扩展Zend_Form,实现一个类似addElementByConfig的方法,在该方法中,我们将传递描述元素本身的浅Zend_Config实例。事实上,我们甚至可以采用递归方法覆盖addElement:如果第一个参数是Zend_Config的实例,那么使用组件数据调用addElement

如果原子性和可重用性是我们在使用Zend_Config描述元素时寻求的主要好处,那么也许我们只是制作一个扩展Zend_Form_元素的自定义元素。然后我们可以用我们想要的任何形式使用这些元素


我不知道为什么它会呈现为文本框。但作为补充说明,我怀疑你的最后两行应该是非活动的,而不是活动的。@DavidWeinraub hah是的,我确实注意到,在我发布问题后不久,好的捕获。实际上,我还提出了另一个注意事项,无论我使用文本、文本区域等的“类型”,它都会创建一个文本字段。我在表单中的代码是这样的:{$this->addElementnew Zend_form_Element$config->site_status;}另一个注意:{$this->addElementnew Zend_form_Element\u Select$config->site_status;}可以工作,但是有点违背了将这一切放在配置文件中的目的。我在谷歌上看到的大多数例子都是这样的,然而,我的目标不是从语义上把一个元素绑定到一个表单,而是拉入所有字段,并在每个表单中选择我想要的字段,因为一些字段可能属于多个表单。继续…在你上面的例子中,我可以用这种方式创建它,虽然我没有测试过,但它实际上可能会工作,然后从更深的深度拉场。我不认为这会导致任何速度或内存缺陷,但它会打破我试图实现的语义目标。我会给你的回答打A+,我可能应该在我的问题描述中更好地解释这一点。我会接受你的回答,因为你付出了很多努力,并且给了我一些选择。它可能并不完全符合我试图实现的目标,但同时,我的目标不是违背框架的基本原则,而是在大多数情况下利用它的“开箱即用”功能。感谢您的努力,我正在考虑您的替代方案,重新检查和构建我的代码。我喜欢你的更新中的两个选项,虽然不是完全现成的概念,但仍然很好地保持了最初的目标——决策时间
$formConfig = new Zend_Config_Ini('path/to/config/myForm.ini', 'myForm');
$form = new Zend_Form($formConfig);