1
我想弄清楚放置代碼的地方,我訪問數據庫並填充選擇元素中的選項的值的最佳位置。把這段代碼放在控制器中似乎很笨拙。讓表單知道數據庫有什麼缺點?誰負責將Zend_Form的選項填充爲數據庫值?
我想弄清楚放置代碼的地方,我訪問數據庫並填充選擇元素中的選項的值的最佳位置。把這段代碼放在控制器中似乎很笨拙。讓表單知道數據庫有什麼缺點?誰負責將Zend_Form的選項填充爲數據庫值?
讓表單知道數據庫的缺點是你會得到緊密耦合的組件 - Zend_Form和上面情況中的數據庫訪問層 - 而這兩個組件不能有任何共同之處。
想象可能發生的情況:
所以最好的解決方案是有一些數據庫特定的mapper類,它可以讓你得到你想要的數據。然後將這些數據作爲依賴項傳遞給表單。這樣你就可以從任何外層獲得獨立的表單(可讀可維護,可測試)。
因此,您可以創建表單的對象,將數據從數據源(不管它是什麼)傳遞到控制器中。
thx答覆。如果我必須填充幾個選擇選項,並且在驗證之後也將選定的值轉換爲對象,這是否會導致非常胖的控制器?有沒有辦法將這種類型的表單前/後處理轉換爲某種類型的幫助對象? – blacktie24
當然。下一步是將您的創建代碼移動到一些專用的類 - 工廠(請參見[什麼是PHP中的工廠設計模式?](http://stackoverflow.com/questions/2083424/what-is-a-factory-design- pattern-in-php)的一個很好的例子)。我想你需要一個工廠來生成一個表單和一個工廠從一個驗證過的表單生成一些結果對象,所以它可以被持久化。 –