Как сериализовать swfWidgetformChoice несколько опций для одного поля в базе данных в Symfony 1.4 - PullRequest
1 голос
/ 17 февраля 2011

Я использую Symfony 1.4 в проекте, и мне нужно хранить несколько опции в одном поле.

Я использую sfWidgetFormChoice. Настройте луки следующим образом:

    $status = Doctrine::getTable('Profile')->getStatuses();
    $this->widgetSchema['status'] = new sfWidgetFormChoice(array(
        'expanded'=>true,
        'choices'=>$status,
        'multiple'=>true
        ));
    $this->validatorSchema['status'] = new sfValidatorChoice( 
            array('choices'=>array_keys($status),
            'multiple'=>true, 'required'=>false
   ));

В моей модели я использую следующее для сериализации нескольких опций в одиночное поле.

  public function  setStatus($data) {
     $data = serialize($data);

     $this->_set('status', $data);

}

?> Который работает как брелок и сохраняет данные как:

a:2:{i:0;s:7:"relaxed";i:1;s:8:"Inactive";}

Однако у меня возникают трудности с извлечением сериализованной строки как массив, использующий в моей модели следующее:

    public function  getStatus() {
     return unserialize($this->status);
    }

Я что-то здесь упускаю? Я получаю следующую ошибку:

Примечание: неопределенное свойство: Profile :: $ status в C: ... / .. /. / Что не имеет смысла для меня ..

Ответы [ 2 ]

5 голосов
/ 17 февраля 2011

Doctrine имеет тип «Массив», который автоматически сериализует / десериализует ваш массив для вас.Просто укажите тип состояния «Массив» в файле schema.yml.

1 голос
/ 18 февраля 2011
public function  getStatus() {
    return unserialize($this->_get('status'));
}

Однако вы можете использовать решение, упомянутое @ greg0ire

...