Zend框架/表单元素呈现为文本框而不是下拉框



我在config.ini文件中有以下内容:(Zend_Form_Element)

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_Config来构建Zend_Form的实例。

但是查看代码可以发现,Zend_Form::addElement()并没有直接将Zend_Config实例作为参数。相反,看起来您需要将Zend_Config实例传递给表单构造函数。似乎配置格式需要更深一点,以便将配置键映射到setXXX()调用。

In path/to/config/myForm.ini:

[myForm]
myForm.elements.site_status.name = "site_status"
myForm.elements.site_status.type = "select"
myForm.elements.site_status.label = "Status"
myForm.elements.site_status.options.multiOptions.active.key = "Active"
myForm.elements.site_status.options.multiOptions.active.value = "Active"
myForm.elements.site_status.options.multiOptions.inactive.key = "Inactive"
myForm.elements.site_status.options.multiOptions.inactive.value = "Inactive"

然后实例化:

$formConfig = new Zend_Config_Ini('path/to/config/myForm.ini', 'myForm');
$form = new Zend_Form($formConfig);

没有测试,但是看看这个例子:

使用Zend_Form与Zend_Config - Andrew Vayanis

感觉应该像上面那样。

考虑到@Aaron的评论/反馈,还有两个方法。

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

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

相关内容

  • 没有找到相关文章

最新更新