4

使用 aZend_Form时,验证输入没有留空的唯一方法是

$element->setRequired(true);

如果未设置且元素为空白,则在我看来,验证未在元素上运行。

如果我确实使用setRequired()了,该元素会自动获得标准的 NotEmpty 验证器。问题是这个验证器的错误消息很糟糕,“值为空,但需要一个非空值”。我想更改此消息。目前我已经通过改变Zend_Validate_NotEmpty课程来做到这一点,但这有点hacky。

理想情况下,我希望能够使用我自己的类(派生自Zend_Validate_NotEmpty)来执行非空检查。

4

5 回答 5

4

我是这样做的(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);

希望这可以帮助...

于 2008-08-30T11:26:57.207 回答
3

默认情况下, 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!')));
于 2008-10-10T15:31:30.320 回答
2

添加一个 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) 以在错误消息打印到页面时对其进行本地化。

于 2008-11-25T17:31:29.323 回答
1

更改错误消息

于 2008-08-29T17:54:26.970 回答
0

据我所见,更改错误消息无法更改特定错误的消息。加上手册使它看起来像是属于 Zend_Form 的函数,但是在 Zend_Form 的实例上使用它时,我发现方法未找到。

用法的例子真的很棒。

于 2008-08-29T18:13:46.473 回答