Zend_Form:在值为0的复选框上填充问题

时间:2012-10-07 16:34:44

标签: zend-framework checkbox zend-form populate zend-filter

我不明白为什么populate()检查带有值= 0的复选框,而没有关于此复选框的数据传递...

我的表单元素:

$this->addElement('multiCheckbox', 'etoiles', array(
    'filters'    => array('Int'),
    'separator' => '',
    'label_placement' => 'prepend',
    'label_class' => 'caseacocher',
    'decorators'  => $decorator_chain,
));

$listeEtoiles = array(
    '0' =>'Sans étoiles',
    '1' => '1 étoile"',
    '2' => '2 étoiles',
    '3' => '3 étoiles',
    '4' => '4 étoiles',
    '5' => '5 étoiles',
) ;
$this->getElement('etoiles')->addMultiOptions($listeEtoiles) ;

如何将表单填充到我的控制器中:

$this->view->searchForm->populate($this->getRequest()->getPost()) ;

转储$this->getRequest()->getPost('etoiles')时收到的内容:NULL

我的复选框是什么:

<input id="etoiles-0" type="checkbox" checked="checked" value="0" name="etoiles[]">

我不明白。如何检查此复选框,而没有关于etoiles[]的数据? 我只是发现我的“Int”过滤器与它有关。我应该删除吗?如果我想保留这个Int过滤器怎么办?

没有验证器。我应该加些吗?那么InArray验证器呢?我的values数组使用字符串索引,因为我认为$ _POST数据是作为字符串传递的。这是一个错误吗?

任何评论或帮助将不胜感激:)

1 个答案:

答案 0 :(得分:0)

字符串'0'和int 0(对于无线电表单元素未选中)和null之间可能存在混淆,这是PHP的一个怪癖。

特别是当您将输入值过滤为int时,而您的values数组使用字符串索引(是否有理由不使用默认的InArray验证器?)

此外,我发现FormRadio帮助程序使用in_array($opt_value, $value)而没有strict参数来确定已检查的属性。