SilverStripe - 将CheckboxsetField与MultiForm模块一起使用

时间:2015-05-04 09:17:00

标签: php module silverstripe

我有一个使用multiform模块的表单。我有一个由数据对象填充的checkboxsetfield。

保存表单时,我得到了奇怪的结果。例如,如果我选择第一个和第三个复选框,那么这就是数组在数据库中的显示方式:1 {逗号} 3当我希望看到1,3

MyDataObject.php

<?php
...
       if($SomeData = DataObject::get('SomeData')->sort('SortColumn'){
        $fields->push( new CheckboxSetField('SomeData', 'Field Name', $SomeData->map('ID', 'Name')
        ));
    }

MultiForm.php

<?php
...

public function finish($data, $form){

        if(isset($_SESSION['FormInfo']['MultiForm']['errors'])){
            unset($_SESSION['FormInfo']['Form']['errors']);
        }

        parent::finish($data, $form);

        $steps = DataObject::get('MultiFormStep', "SessionID = {$this->session->ID}");

        $MyStep = $this->getSavedStepByClass('MyStep');

        if($this->getSavedStepByClass('MyStep')){
            if($MyStep->loadData()){
                $MyDataObject = new MyDataObject();
                $MyStep->saveInto($MyDataObject);
                $MyDataObject->write();
            }
        }
...

如何处理数组的任何想法?

1 个答案:

答案 0 :(得分:1)

CheckboxSetField确实有代码在保存到数据库或调用{comma}函数时引用dataValue。这基本上是在保存到单个列时转义在字符串中定义为值的任何逗号。

这告诉我,您的多种形式不能为CheckboxSetField提供正确的输入,或者这种情况比代码显示的更多。

如果CheckboxSetField获得类似array('1,3')的数组,那就是我期望看到这种类型的结果。像你一样调用map会返回一个SS_Map对象,该对象可能无法自动转换您的预期方式。将值传递到->toArray()时,请尝试在map调用后添加CheckboxSetField

如果这还没有解决问题,我们可能需要查看DataObject本身以及其他一些信息。