我有一个使用多种形式模块的表单。我有一个由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
本身以及其他一些信息。