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