ZF 1.11.2
我已经尝试了大多数语法。他们没有点击。
$validators = array('product_name' => array('alnum'));
//...
$input = new Zend_Filter_Input($filters, $validators, $_POST);
您如何使用上述语法为alnum
设置自定义错误消息?使用'messages' => array('Not alnum!!')
?是的,好吧......怎么样?我一定试过100个嵌套数组。
答案 0 :(得分:2)
使用内置翻译器。
例如,在配置文件中配置转换程序以使用简单数组
; Translations
resources.translate.data = APPLICATION_PATH "/lang"
resources.translate.adapter = "Array"
resources.translate.options.scan = "directory"
resources.translate.options.disableNotices = "1"
这告诉您想要
的Translate应用程序资源插件APPLICATION_PATH/lang
现在,为您要支持的任何语言创建文件夹。至少,您需要application/lang/en
。例如
application
lang
en
en_AU
en_US
在每个语言文件夹中,创建一个translate.php
文件。此文件将包含(并返回)每个转换的键/值对数组。您可以在验证器类中找到每个验证器消息的密钥。以下是Alnum验证器
<?php
// application/lang/en/translate.php
return array(
Zend_Validate_Alnum::NOT_ALNUM => 'Not alnum!!',
Zend_Validate_Alnum::INVALID => 'Not valid!!'
);
对于所有Zend验证器,您还可以在邮件中使用%value%
占位符,例如
Zend_Validate_Alnum::NOT_ALNUM => "'%value%' is not alpha-numeric"
答案 1 :(得分:2)
如果您只是尝试更改 form 元素的验证消息,我总是这样做(在扩展Zend_Form的类中):
$this->addElement('text', 'myTextField', array(
'label' => 'The Label',
'description' => 'The description for the field...',
'filters' => array(
'StringTrim',
// etc
),
'validators' => array(
array('NotEmpty', true, array(
'messages' => 'This field is required',
)),
array('AnotherValidator', true, array(
'messages' => 'Bad value',
)),
// etc
),
));
你是说这不起作用?或者你在更一般的背景下使用你的验证器,在这种情况下@Phil Brown(真棒!)的答案将完成这项工作。
答案 2 :(得分:2)
禁用元素上的转换器将禁用所有验证器消息的转换。无法在表单或元素上使用转换器,只覆盖一个验证器消息。当元素被验证时,翻译器被注入每个验证器。如果已设置,验证器将使用转换器。因此,将不会使用自定义错误消息。
Zend_Validate_Abstract来:: _的CreateMessage()
// $message is your custom error message
$message = $this->_messageTemplates[$messageKey];
if (null !== ($translator = $this->getTranslator())) {
// your custom error message gets overwritten because the messageKey can be translated
if ($translator->isTranslated($messageKey)) {
$message = $translator->translate($messageKey);
} else {
$message = $translator->translate($message);
}
}
我认为只能通过禁用元素上的翻译器来使用自定义错误消息。
$element->setDisableTranslator(true)
答案 3 :(得分:0)
如果你有翻译器,请使用setMessage并禁用翻译器。
$alnum = new Zend_Validate_Alnum();
$alnum->setDisableTranslator(true);
$alnum->setMessage(
'Not alnum!!',
Zend_Validate_Alnum::NOT_ALNUM
);
$validators = array('product_name' => array($alnum));
如果在表单元素上使用验证器,则必须禁用元素上的转换器。