Zend 框架:设置 Zend_Form_Element 表单字段为必填项,如何更改用于确保元素不为空的验证器

StackOverflow https://stackoverflow.com/questions/34848

  •  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 的实例上使用它时,我发现方法未找到。

用法的例子真的很棒。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top