Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用Zend_Form_Element_Select时访问InArray验证程序的自定义错误消息_Php_Zend Framework_Zend Form - Fatal编程技术网

Php 使用Zend_Form_Element_Select时访问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完全按照预期工作,如果输入了除我添加的多选择选项之一之外的任何其他值,则显示无效 当我想在某

我使用的是Zend Framework 1.62(因为我们正在将成品部署到Red Hat实例,该实例没有足够的hgih PHP版本来支持>ZF1.62)

在使用Zend Form创建表单时,我添加了一个select元素,添加了一些multi选项。 我使用Zend表单作为对象内验证层,通过它传递对象值,并使用isValid方法确定所有值是否都在正常参数范围内

Zend_Form_Element_Select完全按照预期工作,如果输入了除我添加的多选择选项之一之外的任何其他值,则显示无效

当我想在某个时候显示表单时,问题出现了,我无法编辑由ZF自动添加的预注册“InArray”验证程序创建的错误消息。我知道我可以禁用此行为,但除了错误消息之外,它工作得很好。我尝试了以下几点:

$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验证程序。