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

时间:2020-03-05 18:45:06  来源:igfitidea点击:

当使用Zend_Form时,验证输入是否为空的唯一方法是

$element->setRequired(true);

如果未设置此项并且该元素为空白,则对我来说似乎未在该元素上运行验证。

如果我确实使用setRequired(),则会自动为元素提供标准的NotEmpty验证器。问题是带有此验证器的错误消息很烂,"值是空的,但需要一个非空值"。我想更改此消息。目前,我已经通过更改Zend_Validate_NotEmpty类来完成此操作,但这有点hacky。

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

解决方案

回答

更改错误消息。

回答

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

使用的例子真的很棒。

回答

我是这样做的(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)以在将错误消息打印到页面时对其进行本地化。