Опции выбора Symfony загружаются из таблицы - PullRequest
1 голос
/ 24 февраля 2011

Мне нужна помощь с формами Symfony и Doctrine.

Я хочу добавить виджет выбора в форму и загрузить этот виджет с данными из базы данных.

У меня есть это в Survey.class.php:

$this->widgetSchema['service'] = new sfWidgetFormChoice(array(
  'choices'  => TService::getServiceTypes(),
  'multiple' => true,
  'expanded' => false));

А это TService.class.php

class TService extends BaseTService
{
  static public function getServiceTypes()
  {
    return Doctrine::getTable("TService")
       ->createQuery()
       ->select('description')
       ->execute();
  }
}

У меня есть выборка с 2 вариантами, и это хорошо, но варианты - это «1» и «2» вместо описания службы.

Sugestions

Спасибо, ребята

Ответы [ 4 ]

1 голос
/ 25 февраля 2011

Вы должны использовать sfWidgetFormDoctrineChoice вместо ручной выборки параметров (у нее также есть пара валидаторов).Тем не менее, у вас все еще будет ваша текущая проблема.Решение для этого: реализовать магическую функцию __toString() для ваших объектов TService.

0 голосов
/ 24 февраля 2011

Я получил «ручное» решение, но я уверен, что есть лучшие способыЯ только что изменил TService::getServiceTypes метод

$table = Doctrine::getTable("TService")
   ->createQuery()
   ->select('description')
   ->execute();

$arrayServices = $table->toArray();
$descServices = array();
foreach ($arrayServices as $service){
    $descServices[] = $service['description'];
}

return $descServices;
0 голосов
/ 24 февраля 2011

Когда вы делаете ./symfony doctrine:build --all, он автоматически создает sfWidgetFormDoctrineChoice, если у вас есть правильная схема:

Survey:
  columns:
    tservice_id: { type: integer }
  relations:
    TService:
      class: TService
      local: tservice_id
      foreignAlias: Surveys

TService:
  columns:
    description: { type: string(100) }
0 голосов
/ 24 февраля 2011

Прочитайте это Заполнение выпадающих из базы данных , надеюсь, даже если это не то, что вы хотите, это поможет. Это S 1.4 и доктрина основана.

...