我使用在线参考文档中的Zend_Form_子窗体示例创建了一个3屏“向导”。
我无法满足的要求是:
如果第一个屏幕的字段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'u 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;
}
}