如何将MultiCheckbox的元素绑定到ZF2中的对象?

时间:2016-04-30 12:09:59

标签: zend-framework2 zend-form checkboxlist zend-form2 zend-form-collection

我正在使用嵌套的Zend\Form\FieldsetZend\Form\Collections,这提供了一种非常舒适的方式来将复杂的对象结构映射到表单,以便从中获取完整的对象(准备保存)表格输入。

我想要在我的表单中添加的元素应该代表可能的协议列表。在数据库中,它是一个包含idname列的简单表,对象的结构可以描述为Endpoint has Protocol[]。我定义了一个MultiCheckbox(下面的s),但我不知道如何将这个元素绑定到Protocol原型。对于Fieldset,它可以通过Fieldset\setObject(...)工作。

如何获取Zend\Form从复选框创建对象的表单处理机制?

到目前为止

代码:

EndpointFieldset.php

// namespace ...;
// use ....;
class EndpointFieldset extends Fieldset
{
    // ...
    public function init()
    {
        parent::init();
        $this->add(
            [
                'type' => 'multi_checkbox',
                'name' => 'protocols',
                'options' => [
                    'label' => _('protocols'),
                    'label_attributes' => [
                        'class' => 'col-md-1 protocol-field'
                    ],
                    'value_options' => $this->getValueOptions(),
                    'selected' => static::PROTOCOLS_DUMMY_VALUE
                ]
            ]
        );
    }
    // ...
    protected function getValueOptions()
    {
        $valueOptions = [];
        foreach (Protocol::PROTOCOLS as $key => $value) {
            $valueOptions[] = [
                'value' => $key,
                'label' => $value
            ];
        }
        return $valueOptions;
    }
}

myform.phml

use Zend\Form\View\Helper\FormMultiCheckbox;
echo $this->formMultiCheckbox($myFieldset->get('protocols'), FormMultiCheckbox::LABEL_PREPEND);

更新

我找到了保存新条目的解决方法:我只需手动完成表单提供的对象,并从Protocol值中创建MultiCheckBox个对象。但是当我将完整对象传递给更新表单(为了编辑现有条目)时,我收到通知并且复选框没有构建:

  

注意:无法将类My \ DataObject \ Protocol的对象转换为/var/www/path/to/project/vendor/zendframework/zend-form/src/View/Helper/FormMultiCheckbox.php中的int 202

我对此的解释是,MultiCheckBox期望一个数组具有值作为基本类型(例如int)。相反,它会获得一个包含Protocol个对象的数组,并尝试将其值用于in_array(...) - 这是行不通的。

0 个答案:

没有答案