Zend 框架:设置 Zend_Form_Element 表单字段为必填项,如何更改用于确保元素不为空的验证器
-
09-06-2019 - |
题
当使用 Zend_Form
, ,验证输入不留空的唯一方法是
$element->setRequired(true);
如果未设置此选项且元素为空,则在我看来,不会在该元素上运行验证。
如果我使用 setRequired()
, ,该元素会自动获得标准 NotEmpty 验证器。问题是这个验证器的错误消息很糟糕,“值是空的,但需要一个非空值”。我想更改此消息。目前我已经通过改变来做到这一点 Zend_Validate_NotEmpty
类,但这有点hacky。
我理想地希望能够使用我自己的类(源自 Zend_Validate_NotEmpty
) 执行非空检查。
解决方案
我是这样做的(ZF 1.5):
$name = new Zend_Form_Element_Text('name');
$name->setLabel('Full Name: ')
->setRequired(true)
->addFilter('StripTags')
->addFilter('StringTrim')
->addValidator($MyNotEmpty);
所以,addValidator() 是有趣的部分。消息设置在“错误消息文件”中(将所有自定义消息捆绑在一个文件中):
$MyNotEmpty = new Zend_Validate_NotEmpty();
$MyNotEmpty->setMessage($trans->translate('err.IS_EMPTY'),Zend_Validate_NotEmpty::IS_EMPTY);
希望这可以帮助...
其他提示
默认情况下,setRequired(true) 告诉 isValid() 添加 NonEmpty 验证 如果尚不存在. 。由于此验证在调用 isValid() 之前不存在,因此您无法设置该消息。
最简单的解决方案是在调用 isValid() 之前手动添加 NonEmpty 验证并相应地设置其消息。
$username = new Zend_Form_Element_Text('username');
$username->setRequired(true)
->addValidator('NotEmpty', true, array('messages' => array('isEmpty' => 'Empty!')));
添加 NotEmpty 验证器,并添加您自己的消息:
// In the form class:
$username = $this->createElement('text', 'username');
$username->setRequired(); // Note that this seems to be required!
$username->addValidator('NotEmpty', true, array(
'messages' => array(
'isEmpty' => 'my localized err msg')));
笔记 除非您还在元素上调用了 setRequired() ,否则 NotEmpty 验证器似乎不会被触发。
在控制器(或任何地方)中,调用 $form->setTranslator($yourTranslator) 以在将错误消息打印到页面时对其进行本地化。
改变 错误信息.
据我所知 更改错误消息 无法更改特定错误的消息。另外,手册使它看起来像是属于 Zend_Form 的函数,但在 Zend_Form 的实例上使用它时,我发现方法未找到。
用法的例子真的很棒。