我有一個文本框,其中用逗號分隔值添加值。一旦表單發佈後,我想檢查每個CSV值對數據庫表,如果他們每個人都已經存在。如果是這樣,那麼我想拋出錯誤信息,否則就很好。Zend Validate:如何驗證textarea中逗號分隔值中的每個單獨值是否爲zend_validate_DbRecordExist?
我該如何執行此操作?
我有一個文本框,其中用逗號分隔值添加值。一旦表單發佈後,我想檢查每個CSV值對數據庫表,如果他們每個人都已經存在。如果是這樣,那麼我想拋出錯誤信息,否則就很好。Zend Validate:如何驗證textarea中逗號分隔值中的每個單獨值是否爲zend_validate_DbRecordExist?
我該如何執行此操作?
你需要的是一個自定義驗證器。你可以擴展Zend_Validate_Abstract
或者你可以簡單地使用回調驗證器。
要做到這一點,你需要添加到您的元素:
$elem = new Zend_Form_Element_Text('elem_name');
$elem->setLabel('Label Name:')
->setRequired(true)
->addValidator('callback', true, array('callback' => array($this, 'functionName')));
$this->addElement($elem);
而且在同一個班(通常是你的表格是在擴展Zend_Form的一類),你添加這個方法:
public function functionName($csvString) {
// stuff here using explode(',', $csvString)
// foreach() to iterate over the result and match against the db each $value
}
有關更多信息,請參閱explode()。但是,如果您的表單元素將被多次調用,並且形式不同,那麼我不建議您使用回調函數,但是您最好編寫自己的驗證器,理論依然是儘管如此。有關如何編寫驗證器的更多信息,請參閱Take a look here。
我真的懷疑這可以直接使用Zend_Validate_Db_RecordExists來實現。我認爲最好的解決方案是爲此創建一個自定義驗證器。一些會花費你的價值,然後爆炸它基於,$valueArray = explode(',', $value);
,然後爲每個$ valueArray檢查元素是否存在數據庫。這不應該太難。如果您不知道自定義驗證程序this可能會有所幫助。
你的答案是完美的,但在我的情況下,我需要提取所有無效的逗號分隔值,並顯示所有這些值在錯誤如下面的文本區域元素。因此,通過您建議的方法,我可以僅爲回調驗證程序返回true或false,但不能收集無效值。所以我最終做了一次驗證表單使用$ form-> isValid($ _ POST)我爆炸值和檢查他們分別在我收集數據庫然後所有和使用$ element-> addError($ invalid_csv。無效'); – 2012-04-03 08:56:44