Php 使用Zend_Form_Element_Select时访问InArray验证程序的自定义错误消息
我使用的是Zend Framework 1.62(因为我们正在将成品部署到Red Hat实例,该实例没有足够的hgih PHP版本来支持>ZF1.62) 在使用Zend Form创建表单时,我添加了一个select元素,添加了一些multi选项。 我使用Zend表单作为对象内验证层,通过它传递对象值,并使用isValid方法确定所有值是否都在正常参数范围内 Zend_Form_Element_Select完全按照预期工作,如果输入了除我添加的多选择选项之一之外的任何其他值,则显示无效 当我想在某个时候显示表单时,问题出现了,我无法编辑由ZF自动添加的预注册“InArray”验证程序创建的错误消息。我知道我可以禁用此行为,但除了错误消息之外,它工作得很好。我尝试了以下几点:Php 使用Zend_Form_Element_Select时访问InArray验证程序的自定义错误消息,php,zend-framework,zend-form,Php,Zend Framework,Zend Form,我使用的是Zend Framework 1.62(因为我们正在将成品部署到Red Hat实例,该实例没有足够的hgih PHP版本来支持>ZF1.62) 在使用Zend Form创建表单时,我添加了一个select元素,添加了一些multi选项。 我使用Zend表单作为对象内验证层,通过它传递对象值,并使用isValid方法确定所有值是否都在正常参数范围内 Zend_Form_Element_Select完全按照预期工作,如果输入了除我添加的多选择选项之一之外的任何其他值,则显示无效 当我想在某
$this->getElement('country')->getValidator('InArray')->setMessage('The country is not in the approved lists of countries');
// Doesn't work at all.
$this->getElement('country')->setErrorMessage('The country is not in the approved lists of countries');
//在应用程序中的其他位置导致冲突,不允许对错误消息进行精确控制
有人有什么想法吗
Ben我通常按照下面的示例设置验证器:
$this->addElement('text', 'employee_email', array(
'filters' => array('StringTrim'),
'validators' => array(
array('Db_NoRecordExists', false, array(
'employees',
'employee_email',
'messages' => array(Zend_Validate_Db_Abstract::ERROR_RECORD_FOUND => 'A user with email address %value% already exists')
))
),
'label' => 'Email address',
'required' => true,
));
元素选项中的验证器数组可以采用验证器名称(字符串)或数组
传递数组时,第一个值是名称,第三个值是验证器的选项数组。您可以在此选项数组中为您的元素指定带有自定义消息的关键消息。如果您使用Zend_Form_element_选择(或任何多个子类),则在验证时,仅当不存在一个InArray验证程序时,才会自动添加InArray验证程序
$el = $this->addElement($name, $label, $require, 'select');
$validator = new Zend_Validate_InArray(array_keys(AZend_Geo::getStatesList()));
$validator->setMessage('Invalid US State.');
$el
->setMultiOptions(AZend_Geo::getStatesList())
->setRegisterInArrayValidator(false)
->addValidator($validator)
->addFilter(new Zend_Filter_StringToUpper())
->addFilter(new T3LeadBody_Filter_SetNull())
->setDescription('US State. 2 char.');
您可以将验证器设置为:
$options = array(...);
$this->addElement('select', 'agree', array(
'validators' => array(
array('InArray', true, array(
'messages' => array(
Zend_Validate_InArray::NOT_IN_ARRAY => 'Custom message here',
),
'haystack' => array_keys($options),
)),
'multiOptions' => $options,
));
然后将使用您的验证器,而不是自动附加的验证器。是的。。。。但是,在本例中,验证程序是在后台设置的。根据手册:默认情况下,此元素注册一个InArray验证器,该验证器根据已注册选项的数组键进行验证。您可以通过调用setRegisterInArrayValidator(false)或向registerInArrayValidator配置键传递false值来禁用此行为。我的问题与访问这个特定的验证器错误消息有关。谢谢你的回复,有进一步的见解吗?BenInArray验证器在需要时自动附加设置为true。因此,本例的工作原理是没有自动附加InArray验证程序。