我有像這樣一些非必需的,可爲空的元素有規律formType:Symfony的實體堅持空
->add('mytime', TimeType::class, array(
'input' => 'datetime',
'widget' => 'single_text',
"required" => false
))
在實體一個新的記錄,它的工作原理 - 這是一個NULL
。但是,如果我確實定義了它,並且稍後嘗試通過更新表單將其刪除,則它不會更新並保留其值。
在isValid()
塊我檢查:
$data = $editForm->all();
print_r($data['mytime']->getData());
而且它實際上是空的。同一個實體:
$entity->getMyTime()
爲空。但是當我
$em->persist($entity);
$em->flush();
mytime
仍然有其舊值。
我錯過了什麼?
[編輯]的要求,全面控制器代碼:
public function myFunctionAction(Request $request ,$id, $to) {
$em = $this->getDoctrine()->getManager();
$entity = $em->getRepository(Day::class)->find($id);
$editForm = $this->createForm(new DayType(), $entity);
$editForm->add('submit', 'submit', array('label' => 'Update'));
$editForm->handleRequest($request);
if ($editForm->isSubmitted() && $editForm->isValid()) {
$em->persist($entity);
$em->flush();
}
return array(
'entity' => $entity,
'to' => $to,
'edit_form' => $editForm->createView(),
);
}
[EDIT2] 一些測試與我的答案得到了想法後,我在isValid()
節嘗試這樣做:
if(is_null($entity->getMyTime()) || empty($entity->getMyTime()))
$entity->SetMyTime((new \DateTime())->setTime(00, 00));
因此,它將時間設置爲00,並且我可以使用它...但: - 重新加載時的頁面仍顯示舊值。我認爲這很正常,因爲$editForm
是在isValid()
之前聲明的(明顯)並且沒有更新。由於在數據庫中存儲00:00與NULL相關性較低,因此它遠不是理想的。
你可以在創建實體並設置時間的地方顯示完整的代碼,直到你堅持並刷新它爲止? –
用控制器代碼編輯@AlvinBunk,是你想要的嗎? –
你的實體中有setter方法,叫做setMytime(),M是大寫的嗎?似乎表單字段沒有映射到實體。另請參閱開發環境中窗體部分的Symfony分析器。 – ste