填充作为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>
答案 0 :(得分:1)
我不是100%肯定你在追求什么。我解释一下,对于一个页面视图,你的例子中的SQL调用被多次执行,你不喜欢这样吗?
您可以缓存
的选择内容