2012-04-02 12 views

回答

4

你需要的是一個自定義驗證器。你可以擴展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

+0

你的答案是完美的,但在我的情況下,我需要提取所有無效的逗號分隔值,並顯示所有這些值在錯誤如下面的文本區域元素。因此,通過您建議的方法,我可以僅爲回調驗證程序返回true或false,但不能收集無效值。所以我最終做了一次驗證表單使用$ form-> isValid($ _ POST)我爆炸值和檢查他們分別在我收集數據庫然後所有和使用$ element-> addError($ invalid_csv。無效'); – 2012-04-03 08:56:44

2

我真的懷疑這可以直接使用Zend_Validate_Db_RecordExists來實現。我認爲最好的解決方案是爲此創建一個自定義驗證器。一些會花費你的價值,然後爆炸它基於,$valueArray = explode(',', $value);,然後爲每個$ valueArray檢查元素是否存在數據庫。這不應該太難。如果您不知道自定義驗證程序this可能會有所幫助。

相關問題