我有一个使用多种形式模块的表单。我有一个由dataobject填充的checkboxsetfield。
当保存表单时,我得到了奇怪的结果。例如,如果我选中了第一个和第三个复选框,那么这就是数组在数据库中的显示方式:1{comma}3当我希望看到1,3时
mydataobject.php

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

多格式.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();
            }
        }
...

有什么办法处理这个数组吗?

最佳答案

CheckboxSetField在保存到db或调用{comma}函数时确实有引用dataValue的代码。这实际上是在保存到单个列时转义字符串中定义为值的任何逗号。
这告诉我,要么您的多表单没有为CheckboxSetField提供正确的输入,要么这种情况比您的代码显示的还要多。
如果CheckboxSetField得到一个类似于array('1,3')的数组,那么我将期望看到这种类型的结果。像调用map一样调用会返回一个SS_Map对象,该对象可能不会自动转换您所期望的方式。当您将值传递到->toArray()时,尝试在map调用之后添加CheckboxSetField
如果这不能解决问题,我们可能需要查看DataObject本身以及其他一些信息。

09-13 03:44