0

我在 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 或其他一些存储方法)一个配置文件,它将是属于特定表单的字段/元素列表(非程序员类型可以轻松编辑),“通用”表单类将读取、提取元素信息并动态创建表单。

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

我希望这能阐明我的思维过程以及我为什么按照上面示例中的方式这样做的原因。

4

1 回答 1

1

我还没有玩过使用 aZend_Config来构造Zend_Form.

但是看一下代码表明它Zend_Form::addElement()不会直接将Zend_Config实例作为参数。相反,您似乎需要将您的Zend_Config实例传递给表单构造函数。似乎配置格式需要更深一些才能将配置键映射到setXXX()调用。

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。然后我们可以以任何我们希望的形式使用这些元素。

于 2011-08-26T08:06:56.160 回答