我正在使用这种结构作为我的元素:
$freetext = $this->CreateElement('textarea', 'freetext')
->setLabel('Comments')
->setAttrib('class','input-textarea')
->setOptions(array('rows' => '2', 'cols'=>'30'))
->addValidator('StringLength', false, array(0,500))
->addFilter('HtmlEntities')
->addFilter('StripTags')
->setRequired(true);
我想为此添加“allowEmpty”但无法找到正确的语法。我希望有类似的东西:
... ->addValidator('allowEmpty', false, true)
但这不起作用。
编辑:我已将setRequired()更改为true - 我希望在require字段中允许空字符串作为可接受的值。
无论使用情况如何,如何将此选项添加到我的元素中?
答案 0 :(得分:5)
- > setRequired(假);
如果您想允许空字符串并将空字符串保存到数据库,这就足够了。
如果您希望该字段是可选的,并且如果没有给出任何内容,则在数据库中保留空值,添加:
->addFilter(new Zend_Filter_Null)
答案 1 :(得分:3)
$freetext = $this->CreateElement('textarea', 'freetext')
->addValidator('StringLength', false, array(10,500))
->setRequired(false);
您的代码应该已经这样做,setRequired(false)
方法执行您要求的操作,即如果未提交该值,则不会运行验证程序。
您对编写的代码,某些验证错误消息或其他内容有任何疑问吗?
<强>更新强>
我已将setRequired()更改为true - 我希望在require字段中允许空字符串作为可接受的值。
setRequired(true)
中的语义是什么,并允许空字符串作为有效值?或者更好的是,如果元素可以为空,你需要什么?
你在编辑中提出的问题是没有意义的,因为如果需要一个元素,它必须有一个与空字符串不同的值。如果您需要接受空字符串作为有效值,请使用setRequired(false)
。当您使用Zend_Form::getValues()
或Zend_Form_Element::getValue()
获取表单值时,您将获得空字符串作为结果。
无论如何,这是对setRequired
和setAllowEmpty
from ZF manual的解释:
使用默认值,在不传递值的情况下验证元素,或 为它传递一个空字符串,跳过所有验证器并验证 TRUE。
setAllowEmpty(false)留下另外两个提到的标志 未触及,将验证您为其定义的验证器链 此元素,无论传递给isValid()的值如何。
setRequired(true)保持其他两个提到的标志不变, 将在验证器链上添加“NotEmpty”验证器(如果没有) 已设置)),设置$ breakChainOnFailure标志。这个 行为提供所需的标志语义:如果没有传递值, 我们立即使提交无效并通知用户,并且 阻止其他验证器运行我们已经知道的东西 数据无效。
如果您不想要此行为,可以通过传递来关闭它 FALSE值为 setAutoInsertNotEmptyValidator($ flag);这将 阻止isValid()放置'NotEmpty'验证器 验证器链。