Zend框架 - 如何为表单元素允许空字段

时间:2011-08-30 11:52:07

标签: zend-framework zend-form

我正在使用这种结构作为我的元素:

$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字段中允许空字符串作为可接受的值。

无论使用情况如何,如何将此选项添加到我的元素中?

2 个答案:

答案 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()获取表单值时,您将获得空字符串作为结果。

无论如何,这是对setRequiredsetAllowEmpty from ZF manual的解释:

  

使用默认值,在不传递值的情况下验证元素,或   为它传递一个空字符串,跳过所有验证器并验证   TRUE。

     
      
  • setAllowEmpty(false)留下另外两个提到的标志   未触及,将验证您为其定义的验证器链   此元素,无论传递给isValid()的值如何。

  •   
  • setRequired(true)保持其他两个提到的标志不变,   将在验证器链上添加“NotEmpty”验证器(如果没有)   已设置)),设置$ breakChainOnFailure标志。这个   行为提供所需的标志语义:如果没有传递值,   我们立即使提交无效并通知用户,并且   阻止其他验证器运行我们已经知道的东西   数据无效。

  •   
     

如果您不想要此行为,可以通过传递来关闭它   FALSE值为 setAutoInsertNotEmptyValidator($ flag);这将   阻止isValid()放置'NotEmpty'验证器   验证器链。