symfony - дополнительное поле в автоматически сгенерированной форме модели - PullRequest
0 голосов
/ 13 ноября 2011

У меня есть 3 таблицы в моем приложении. - event, event_category и event_category_connection. Что является отношением «многие ко многим» между двумя первыми таблицами. То, что я пытаюсь сделать, это добавить sfWidgetFormDoctrineChoice с категориями к EventForm (который генерируется автоматически с помощью модели Symfony - доктрина), чтобы после сохранения события я мог автоматически добавлять связь между новым событием и уже существующими категориями.

$this->widgetSchema['event_category_id'] = new sfWidgetFormDoctrineChoice(array(
  'model' => 'EventCategory', 
  'add_empty' => false, 
  'multiple'=>"true",
  'expanded'=>true));
$this->setValidator('event_category_id', new sfValidatorDoctrineChoice(array(
  'model' => 'EventCategory', 
  'required' => false)));

Это то, что я добавил к автоматически сгенерированному EventForm. Я понимаю, что во время операции создания новый объект сохраняется с помощью функции $form->getObject()->save(). Это место, где я получаю сообщение об ошибке (Неизвестное свойство записи / связанный компонент).

Любое предложение, как я могу справиться с этой операцией. Вот что я пытаюсь кодировать:

В одном действии -> сохранить объект -> получить идентификатор нового объекта -> сохранить отношение многие ко многим между категориями и новым объектом.

Krzycho.

1 Ответ

0 голосов
/ 14 ноября 2011

Сначала вы должны сделать $form->save(), затем вы сохраните свои отношения (это один из подходов, возможно, есть много способов добраться туда):

  protected function processForm(sfWebRequest $request, sfForm $form)
  {
    $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
    if ($form->isValid())
    {    
      $obj = $form->save();

      $this->saveRelations($request, $obj);
      // save the event_category objects in an array: $event_categories
      // $obj->EventCategory = $event_categories;
      // $obj->save();
    }
    // ...
  }
...