我使用在線參考文檔中的Zend_Form_SubForm示例創建了一個3屏幕「嚮導」。如何在Zend子表單中一次驗證> 1個字段?
我在遇到問題時遇到的要求如下: 如果第一個屏幕的字段1,2,& 3已經在數據庫中,請通知用戶他們正試圖添加重複記錄。每個字段都有自己的驗證器。不知怎的,我需要添加這個「組驗證器」。
因此,在最基本的層面上,我試圖做的事:
if($field_1_not_in_db && $field_2_not_in_db && $field_3_not_in_db){
return true;//validation OK
} else {
return false;//invalid data
}
我來面對幾個問題,雖然: 1)因爲它適用於多個領域,我不知道附加到哪個字段。錯誤信息出現在它們所連接的字段旁邊,所以這很重要......除非我可以讓這些「多字段驗證程序」錯誤出現在屏幕的頂部,這很理想。 2)我的驗證器只接收一個值(我附加到的字段的值,而不是它應該驗證的多個字段的值)。 3)我提供了錯誤信息中原始(非重複)記錄的鏈接,但是它轉義了鏈接,我無法弄清楚如何解決這個問題。
我正在使用的設置(下面)實際上執行得很好,但NewPlace驗證器接收$ _POST ['city_fk']作爲$ fields,而不是所需的發佈值組。
$city_fk = new Zend_Form_Element_Select('city_fk');
$cities = array();
$city_fk->setMultiOptions($cities)
->setLabel('City')
->setDescription('The city this place is in')
->setRequired(true);
$v = array(
'place_is_unique' => array(
'NewPlace',
'fields' => array('place_name','phone_number','phone_extension','street','post_code_name'),
)
);
$city_fk->addValidators($v);
$addressSubForm->addElement($city_fk);
class My_Validate_NewPlace extends Zend_Validate_Abstract
{
public function isValid($fields)
{
$result = false;
if(!$result)
{
$this->_error('sorry, this is duplicate data. see it <a href="linktoduplicate">here</a>');
return false;
}
return true;
}
}