使用Zend_Form填充数据库中的选择

时间:2008-12-19 23:07:40

标签: php zend-framework zend-form

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

我已使用populate()填写各种表单元素值,但不会填充select语句。

我的解决方案虽然有效,但我怀疑并不理想,如下:

init()的{​​{1}}方法(扩展MyForm)中,我进行数据库调用并获取所需的数据。

Zend_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 传递给正确的select元素的多选项值。然后,当控制器获取视图的表单时,如果需要填充表单,我会调用它,并且所有内容都显示正确填充。

我看到的一些问题:首先,我在表单的$flat方法中调用了这个数据库,因此每次使用表单时都会调用它。其次,我打开了一个数据库连接来填充select元素,然后我做第二个连接来使用populate。

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

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

1 个答案:

答案 0 :(得分:1)

我不是100%肯定你在追求什么。我解释一下,对于一个页面视图,你的例子中的SQL调用被多次执行,你不喜欢这样吗?

您可以缓存

的选择内容
  • 在init函数或类中使用静态变量的页面视图。
  • 用户作为会话变量。
  • 所有用户使用Zend_Cache进行文件或内存缓存,具体取决于生成动态的方式。