2015-05-04 55 views
3

我有一個使用multiform模塊的窗體。我有一個checkboxsetfield由一個數據對象填充。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

CheckboxSetField確實有保存到數據庫或調用dataValue函數時引用{comma}的代碼。這基本上是逃避了在保存到單個列時被定義爲字符串中的值的任何逗號。

這告訴我要麼你的multiform沒有提供正確的輸入到CheckboxSetField或者這個情況比你的代碼顯示更多。

如果CheckboxSetField獲得像array('1,3')這樣的數組,那麼當我期望看到該類型的結果時。調用map就像你已經返回一個SS_Map對象,它可能不會自動轉換你所期待的方式。在將值傳遞給CheckboxSetField時,嘗試在map調用後添加->toArray()

如果這樣不能解決問題,我們可能需要看到DataObject本身以及其他一些信息。

+0

感謝您的回覆Turnerj, 我按照您的建議完成了,但結果仍然相同。我完全同意你對checkboxsetfield的常見行爲所說的話,我有另一種表達方式完全正常。問題在於我認爲使用MultiForm Module。我會嘗試收集更多的代碼示例來展示今晚。 –