1

填充作为 Zend_Form 一部分的选择元素的最佳方法是什么?

我习惯于populate()填写各种表单元素值,但选择语句不会被填充。

我的解决方案(可行但我怀疑并不理想)如下:

在(which extends ) 的init()方法中,我进行数据库调用并获取所需的数据。MyFormZend_Form

$opt = Zend_Registry::get('dbAdapter');
$sql = 'SELECT DISTINCT foo FROM bar';
$res = $opt->fetchAll($sql);
$flat = $this->flattenArray($res); //this flattens the array and 
                                   //sets the keys to equal the values

此时我传递$flat给正确选择元素的多选项值。然后,当控制器获取视图的表单时,如果需要填充表单,我会在其上调用填充,并且所有内容都显示为正确填充。

我看到的一些问题:首先我在表单的init()方法中有这个数据库调用,所以每次使用表单时都会调用它。其次,我打开了一个数据库连接以填充选择元素,然后我进行第二个连接以使用填充。

有什么更好的方法来完成这一切?我想做一个数据库连接并使用填充来填充所有内容并在我的控制器中完成所有操作,而不是在扩展表单类和控制器之间拆分它。这是最好的方法吗?这是我的定制解决方案,它有效,但我知道它远非理想

(顺便说一句,作为一个独自工作并在一个孤立的地方工作的人能够向stackoverflow提出这样的问题,就好像我正在抓住一个同事问一个问题一样,对我来说非常有用......谢谢)

4

1 回答 1

1

我不是 100% 确定你在追求什么。我解释说,您的示例中的 SQL 调用针对一个页面视图执行了多次,您不喜欢这样吗?

您可以缓存选择的内容

  • 在 init 函数或类中具有静态变量的页面视图。
  • 用户作为会话变量。
  • 所有用户都使用 Zend_Cache 来归档或 memcache,这取决于它是如何动态生成的。
于 2008-12-20T06:56:18.797 回答