也许是简单的问题,我只是遗漏了一些东西。
我有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
,即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的帮助!
答案 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());
}
...
}
}