In einer DB-Tabelle habe ich mehrere Felder mit datetime
als Feldtyp. Also muss ich Daten nur als Datum-Zeit-Objekt beibehalten.
Aus einem Formular erhalte ich die Uhrzeit als String wie
%Vor%Jetzt, wo immer ich meine Entity persistiere, bekomme ich folgenden Fehler:
Schwerwiegender Fehler: Aufruf eines Mitgliedsfunktionsformats () für ein Nicht-Objekt in .. \ DateTimeType.php in Zeile 44
Ich habe es mit
versucht %Vor%oder
%Vor%oder nur
%Vor%Der letzte Code funktioniert, aber er verwendet nicht den Zeitstempel, der als Argument übergeben wurde, sondern er erhält nur die aktuelle Zeit.
Irgendwelche Ideen?
Ich erstelle immer DateTime-Objekt mit seinem Konstruktor, in Ihrem Fall wäre es:
%Vor%Wenn dies funktioniert, aber nicht den Zeitstempel verwendet, haben Sie wahrscheinlich nicht den Wert in $ post ['started_at']. Versuche es zu debuggen oder mach einfach den Dirty-Trick:
%Vor% Im Interesse künftiger Leser, die sicher dieses Problem irgendwann erfahren werden (dies ist der erste Beitrag, wenn Sie "symfony 2 datetime from string" googeln), beachten Sie, dass in Symfony 2 die DateTime Das Objekt akzeptiert KEINEN String mit folgendem Format: "d/m/Y H:i:s"
und unterstützt wahrscheinlich auch nicht viele andere.
Um nicht verrückt zu werden, habe ich tatsächlich herausgefunden, dass die einfachste und sicherste Lösung, solche Fehler zu vermeiden, diese ist:
Zuerst erhalten Sie Ihr Datum string von jeder Art von Anfrage, die Sie tun (in meinem Fall eine generische AJAX-Anfrage) und konvertieren Sie es in ein DateTime-Objekt , dieses Beispiel nimmt an, dass wir ein DateTime-Objekt für 25/04/2015 15:00
erstellen müssen, welches das Format des jQuery UI italian DateTimePicker ist (das ist nur ein Beispiel):
(Hinweis: Verwenden Sie \
, um das DateTime-Objekt von php zu verwenden, andernfalls verwenden Sie das datetime-Objekt von Symfony, das Ihnen eine Ausnahme ausgibt)
Wenn Sie dies getan haben, erstellen Sie eine Datumsstring mit der Funktion comfort format , indem Sie dem ersten Parameter das erwartete Ausgabeformat ( Y-m-d H:i:s
) geben:
Auf diese Weise sind Sie 100% sicher, dass jede Art von Format, das Sie übergeben oder empfangen, ordnungsgemäß konvertiert wird und Sie keine Ausnahme vom DateTime-Symfony-Objekt erhalten, solange Sie angeben was Sie als Eingabe erwarten .
Da ich weiß, dass dieser Beitrag ziemlich alt ist, habe ich mich entschieden, das zu posten, weil ich keine andere wertvolle Quelle gefunden habe, aber diese hier, um zu verstehen, wo das Problem hätte sein können.
Bitte beachten Sie, dass die beste Lösung immer noch ist, die Datetime-Zeichenfolge im richtigen Format zu senden, aber wenn Sie buchstäblich keine Möglichkeiten haben, ist der sicherste Weg, eine solche Zeichenfolge zu konvertieren, die obige.