Php 使用Zend_表单填充数据库中的选项

Php 使用Zend_表单填充数据库中的选项,php,zend-framework,zend-form,Php,Zend Framework,Zend Form,填充作为Zend_表单一部分的select元素的最佳方法是什么 我使用了populate()来填充各种表单元素值,但是select语句没有填充 我的解决方案可行,但我怀疑并不理想,如下所示: 在MyForm(扩展了Zend\u Form)的init()方法中,我进行了一次数据库调用,并获得了所需的数据 $opt = Zend_Registry::get('dbAdapter'); $sql = 'SELECT DISTINCT foo FROM bar'; $res = $opt->fet

填充作为Zend_表单一部分的select元素的最佳方法是什么

我使用了
populate()
来填充各种表单元素值,但是select语句没有填充

我的解决方案可行,但我怀疑并不理想,如下所示:

MyForm
(扩展了
Zend\u Form
)的
init()
方法中,我进行了一次数据库调用,并获得了所需的数据

$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()
方法中调用了这个数据库,因此每次使用表单时都会调用它。第二,我打开了一个数据库连接来填充select元素,然后我做了第二个连接来使用populate

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


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

我不是100%确定你想要什么。我认为您的示例中的SQL调用对于一个页面视图执行多次,您不喜欢吗

您可以缓存所选内容

  • 在init函数或类中具有静态变量的页面视图
  • 将用户设置为会话变量
  • 所有用户都可以使用Zend_缓存创建文件或memcache,具体取决于生成的动态方式

我不能100%确定你在追求什么。我认为您的示例中的SQL调用对于一个页面视图执行多次,您不喜欢吗

您可以缓存所选内容

  • 在init函数或类中具有静态变量的页面视图
  • 将用户设置为会话变量
  • 所有用户都可以使用Zend_缓存创建文件或memcache,具体取决于生成的动态方式