2015-05-04 6 views
3

У меня есть форма, использующая мультиформатный модуль. У меня есть checkboxsetfield, заполненный данным объектом.SilverStripe - использование CheckboxsetField с модулем MultiForm

При сохранении формы я получаю странные результаты. Например, если выбрать первые и третьи флажки, то это, как появляется массив в базе данных: 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 имеет код, который ссылается на {comma} при сохранении в БД или при вызове функции dataValue. Это по существу избегает любых запятых, которые были определены как значения в строке при сохранении в одном столбце.

Это говорит мне, что либо ваш multiform не предоставляет нужный вход CheckboxSetField, либо что в этой ситуации больше, чем показывает ваш код.

Если CheckboxSetField получает массив, такой как array('1,3'), то есть, когда я ожидаю увидеть этот тип результата. Вызов map, как будто у вас есть объект SS_Map, который не может автоматически конвертировать то, как вы ожидаете. Попробуйте добавить ->toArray() после вызова map, когда вы передаете значения в CheckboxSetField.

Если это не решит проблему, нам, вероятно, необходимо будет увидеть DataObject и несколько других битов и фрагментов информации.

+0

Спасибо за ваш ответ Turnerj, Я сделал то, что вы предложили, но все тот же результат. Я полностью согласен с тем, что вы говорите о обычном поведении checkboxsetfield, у меня есть другая форма, которая работает совершенно нормально. Я думаю, проблема связана с модулем MultiForm. Я попытаюсь собрать еще несколько примеров кода, чтобы показать сегодня. –

Смежные вопросы