symfony 1.4 doctrine Form Bind

时间:2011-03-12 07:37:15

标签: forms symfony1 doctrine bind validation

也许是简单的问题,我只是遗漏了一些东西。

我有2个表有3个相同的字段(名称/类型)。

occurrenceoccurrence_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,即doctrine:generate-module app * name * Occurrence

在这个模块中,我加载了一组非常标准的事件,所以这里是trixy部分。我想要做的是从Occurrence加载3个公共字段,但是当我保存表单时,我希望它保存到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表。

Mahalo的帮助!

1 个答案:

答案 0 :(得分:0)

问题是表单永远不会绑定 ocurrence_id 。当使用sfForm时,它使用 nameFormat ($ form-&gt; 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 by参数传递给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());
        }
        ...
   }
}
相关问题