3

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

使用 Zend Form 创建表单时,我添加了一个选择元素,添加了一些多选项。我使用 Zend Form 作为对象内验证层,通过它传递对象值并使用 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');

// 在应用程序的其他地方引起冲突,并且不允许对错误消息进行精细控制。

有人有想法么?

4

3 回答 3

1

我通常按​​照下面的示例设置验证器:

$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,
            ));

元素选项中的验证器数组可以采用验证器名称(字符串)或数组。

当传递一个数组时,第一个值是名称,第三个是验证器的选项数组。您可以在此选项数组中为您的元素指定带有自定义消息的关键消息。

于 2009-08-24T12:10:51.900 回答
1
$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.');
于 2010-01-13T17:52:09.737 回答
1

如果您使用 Zend_Form_Element_Select (或任何 Multi 子类),在验证时 InArray 验证器将仅在不存在时自动添加。

您可以这样设置验证器:

$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,
));

然后将使用您的验证器而不是自动附加的验证器。

于 2010-10-14T02:59:54.763 回答