2008-12-19 167 views
1

填充屬於Zend_Form一部分的select元素的最佳方式是什麼?使用Zend_Form填充數據庫選擇

我用populate()來填充各種表單元素值,但是select語句沒有被填充。

我的解決辦法,這工作,但我懷疑是不是理想的,如下:

MyForminit()方法(它擴展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 

在這一點上我通過$flat正確的選擇元素的多期權價值。然後,當控制器獲取視圖的表單時,如果表單需要填充,我將調用它填充,並且所有內容都顯示爲正確填充。

我看到的一些問題:首先,我在表單的init()方法中調用了這個數據庫,所以每次使用表單時都會調用它。其次,我打開了一個數據庫連接來填充select元素,然後我使用第二個連接來使用填充。

什麼是更好的方法來做到這一切?我想做一個數據庫連接並使用填充來填充所有內容,並在控制器中完成所有操作,而不是在擴展表單類和控制器之間進行分割。這是最好的方法嗎?這是我的定製解決方案,它的工作原理,但我知道它是非常理想的

(順便說一句,作爲一個人單獨工作,並在一個孤立的位置能夠問stackoverflow這樣的問題,就好像我抓住一個同事問一個問題,對我來說是非常有用的...謝謝)

回答

1

我不是100%確定你在做什麼。我認爲你的例子中的SQL調用是多次執行一次頁面視圖,而你不喜歡那樣?

可以緩存選擇內容爲

  • 在init函數或者類中的靜態變量的頁面視圖。
  • 用戶作爲會話變量。
  • 所有用戶使用Zend_Cache進行文件或memcache,具體取決於它是如何動態生成的。