Zend framework Zend Framework:无法为部分multicheckbox元素选项设置默认值

Zend framework Zend Framework:无法为部分multicheckbox元素选项设置默认值,zend-framework,Zend Framework,我写这个问题是因为我很难为Zend Framework 1.9.3的_MultiCheckbox元素设置默认值。 我创建Zend_Form_Element_MultiCheckbox,其中包含以下多个选项: $multiCheckbox = new Zend_Form_Element_MultiCheckbox( 'elId', array ( 'disableLoadDefaultDecorators' =>true ) ); $multiCheckbox ->setName(

我写这个问题是因为我很难为Zend Framework 1.9.3的_MultiCheckbox元素设置默认值。 我创建Zend_Form_Element_MultiCheckbox,其中包含以下多个选项:

$multiCheckbox = new Zend_Form_Element_MultiCheckbox( 'elId',
array ( 'disableLoadDefaultDecorators' =>true ) );

$multiCheckbox ->setName( 'elId' )
->setLabel('elId')
->setRequired( false )
->setAttrib('class', 'inputtext')
->setDecorators( array( 'ViewHelper' ) )
->setMultiOptions( $options );
其中,$options数组是一个关联数组“key”=>“value”。该字段显示得很好,我可以得到该元素的所有选中值

当返回到该页面时,我需要再次从DB恢复整个选项列表,并标记选中的选项。我试过这样做:

$multiCheckbox ->setValue( $defaults );
其中$default是数组,包含类型为“checked\u option\u field\u id”=>true的元素
(例如数组('1222'=>true,'1443'=>true))。
该操作检查所有复选框,而不仅仅是我需要的一次,并且我已经传递给setValue()方法。 我尝试只传递一个数组,该数组包含“checked\u option\u field\u id”类型的元素,
(例如数组('1222','1443'))
,但这也不起作用-没有选中任何复选框。 我对这两种数组使用了form setDefaults()方法,但结果是一样的,因为这个方法再次对每个元素使用setValue()

MultiCheckbox元素的呈现方式如下(尝试仅为一个选项设置选中值时的结果):

BoRoom


BoRoom英语2

该元素填充elId[]数组中的选中选项值。这是元素名。 setDefaults()form方法按名称获取所有表单元素,并通过调用setDefault()form方法以及在该setValue()元素方法之后提交其默认值。因此,我的multicheckbox元素名为elId(它不会逐个获取所有元素选项),并为所有选项设置默认值,而不仅仅是数组中给定的值


这就是我的看法,我找不到解决方案如何只为multicheckbox元素的某些选项设置默认值。

setValue()需要一个包含需要检查的值的数组,在这种情况下,例如,需要传递一个包含值1222的数组,1443将它们标记为选中。

Chris正确地认为setValue()要求“选中”一组值(而不是由选项ID键入的布尔值数组)

如果要查找表单生成背后的逻辑,请不要查看
Zend\u form\u元素
对象(或其中的许多扩展元素),请查看
Zend\u View\u辅助对象
对象。特别是
Zend\u View\u Helper\u FormRadio
对象

生成HTML时,将循环选项数组,然后对照值数组检查值-使用数组中的
将数组传递到
setValue()

Zend\u View\u Helper\u FormRadio
行:
150

// is it checked?
$checked = '';
if (in_array($opt_value, $value)) {
    $checked = ' checked="checked"';
}
不确定什么对你不起作用,但如果你通过:

$element->setMultiOptions(array('1111' => 'Some Label', 
                                '2222' 'Some Other Label', 
                                '3333', 'Not Selected Label'));

$element->setValue(array('1111','2222');

它应该会起作用。如果您可以包含一些代码,可能会更容易看到发生了什么?

在插入数据库之前,您需要序列化复选框值。要再次显示选定的数据库值,必须取消序列化要显示的数据

您可以从以下链接阅读详细信息


谢谢

我在上面提到,传递这样的数组也不起作用-没有选中任何选项元素。传递数组类型的数组('1222','1444')不会选中任何复选框。传递数组('1222'=>true,'1444'=>true)将检查所有复选框,而不仅仅是数组中指定的复选框。另外,我在formelement setValue()方法中找不到将默认值设置为multi-Element的正确逻辑。无论如何,我也开始认为问题可能是因为我用来渲染字段的HtmlTag装饰器或ViewHelper装饰器以及它的渲染方式。你们都是对的。我设法让它通过一个带有选项值的数组来工作。谢谢你的帮助。