Ich habe einen regulären Formulartyp mit einigen nicht erforderlich, Nullable-Elementen wie so:Symfony Einheit bestehen bleibt null
->add('mytime', TimeType::class, array(
'input' => 'datetime',
'widget' => 'single_text',
"required" => false
))
In der Einheit:
/**
* @var \DateTime
*
* @ORM\Column(name="mytime", type="time", nullable=true)
*/
private $mytime = null;
Wenn ich definiere, es nicht beim Einlegen ein neuer Rekord, es funktioniert - es ist ein NULL
. Aber wenn ich es definiere und später versuche es zu entfernen, indem ich das Formular aktualisiere, wird es nicht aktualisiert und behält seinen Wert.
Im isValid()
Block I geprüft:
$data = $editForm->all();
print_r($data['mytime']->getData());
Und es ist tatsächlich leer. Gleich in der Einheit:
$entity->getMyTime()
ist leer. Aber wenn ich
$em->persist($entity);
$em->flush();
mytime
hat immer noch seinen alten Wert.
Was fehlt mir?
[EDIT] wie gewünscht, vollständiger Controller-Code:
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(),
);
}
[EDIT 2] Nach einigen Tests mit den Ideen, die ich aus den Antworten bekam, habe ich dies im isValid()
Abschnitt versucht:
if(is_null($entity->getMyTime()) || empty($entity->getMyTime()))
$entity->SetMyTime((new \DateTime())->setTime(00, 00));
Also, es setzt die Zeit auf 00, und ich könnte das möglicherweise verwenden ... ABER: - Die Seite, wenn neu geladen zeigt immer noch den alten Wert. Es ist normal, denke ich, da $editForm
vor isValid()
deklariert wird (offensichtlich) und nicht aktualisiert. - Es ist weit davon entfernt, ideal zu sein, da das Speichern von 00:00 in der DB viel weniger relevant ist als ein NULL.
Können Sie Ihren vollständigen Code anzeigen, wo Sie die Entität erstellen und die Zeit festlegen, bis Sie fortbestehen und es leeren? –
@AlvinBunk mit Controller-Code bearbeitet, ist das, was Sie wollten? –
Haben Sie die Setter-Methode in Ihrer Entity namens setMytime(), mit M in der Oberschale? Es scheint, dass das Formularfeld nicht der Entität zugeordnet ist. Siehe auch den Symfony-Profiler im Formularabschnitt in der Entwicklungsumgebung. – ste