Учение Symfony 1.4 Форма Bind - PullRequest
       16

Учение Symfony 1.4 Форма Bind

0 голосов
/ 12 марта 2011

Возможно, простой вопрос, и я просто что-то упускаю.

У меня есть 2 таблицы, в которых есть 3 одинаковых поля (имена / типы).

occurrence и occurrence_queue

Schema

Occurrence:
  tableName: occurrence
  columns:
    id: {the usual}
    date: {type: date}
    start_time: {type: time}
    end_time: {type: time}
    eid: {a forign key}
OccurrenceQueue:
  tableName: occurrence_queue
  columns:
    id: <-Same As Above->
    occurrence_id: {the usual}
    date: <-Same As Above->
    start_time: <-Same As Above->
    end_time: <-Same As Above->

Затем у меня есть модуль, который построен на Occurrence т.е. доктрина: генерировать-модуль приложение * имя * Вхождение

В этом модуле я загружаю наборПроисшествий, довольно стандартный, так что здесь идет трикси часть.Я хочу загрузить 3 общих поля из Occurrence, но при сохранении формы я хочу сохранить ее в таблицу OccurrenceQueue вместо таблицы Occurrence.

Форма выглядит следующим образом:

DATE: *date picker*
Start Time: HH:MM
End Time: HH:MM

Вот моя неудачная попытка:

public function executeEdit(sfWebRequest $request)
{
  $this->forward404Unless($request->isMethod(sfRequest::POST) || $request->isMethod(sfRequest::PUT));

  $this->forward404Unless($occurrence = Doctrine_Core::getTable('Occurrence')->find(array($request->getParameter('id'))), sprintf('Object occurrence does not exist (%s).', $request->getParameter('id')));

  $request->setParameter('occurrence_id',$occurrence->getId());

  $occurrenceQForm = new OccurrenceQueueForm($occurrenceQueue());

  $occurrenceQForm->bind($request->getParameter($occurrenceQForm->getName(),$request->getFiles($occurrenceQForm->getName()));

  if($occurrenceQForm->isValid())
  {
    $occurrenceQForm->save();
    $this->redirect("happyness");
  }
}

Это никогда не подтверждается.Я предположил , потому что поле и валидации были одинаковыми, все было бы золотым, а что нет, ну, конечно, не так.Итак, вопрос в том, как мне выполнить эту задачу?В конце концов, идея в том, что таблица OccurrenceQueue будет использоваться для обновления таблицы Occurrence.

Махало за помощь!

1 Ответ

0 голосов
/ 12 марта 2011

Проблема в том, что форма никогда не связывает ocurrence_id . При использовании sfForm он использует nameFormat (часть $ form-> getName ()), чтобы сгенерировать имя этого поля, поэтому для работы попробуйте это так:

public function executeEdit(sfWebRequest $request)
{
  ...
  $occurrenceQForm = new OccurrenceQueueForm($occurrenceQueue());

  $values = $request->getParameter($occurrenceQForm->getName());
  $values['occurrence_id'] = $ocurrence->getId();
  $occurrenceQForm->bind($values,$request->getFiles($occurrenceQForm->getName()));
  ...
}

Это не лучший способ сделать это, но он будет работать. Что бы я действительно делал, это передавал Ocurrence по параметру в OcurrenceQForm следующим образом:

public function executeEdit(sfWebRequest $request)
{
  ...
  $occurrenceQForm = new OccurrenceQueueForm($occurrenceQueue(), array('ocurrence' => $ocurrence));
  ...
}

А в вашей OccurrenceForm:

public function OccurrenceQueueForm extends ...{
    public function configure()
    {
        ...
        if($this->getOption('ocurrence') != null){
            $this->setDefault('occurrence_id', $ocurrence->getId());
        }
        ...
   }
}
...