Wie behandeln Datum Eingang in Laravel
Arbeite ich an einer app, die ermöglicht es dem Benutzer zu Bearbeiten-mehrere Termine in einem Formular. Die Termine werden im europäischen format (TT-MM-JJJJ), während die Datenbanken verwendet die Standard YYYY-MM-DD format.
Gibt es mehrere Möglichkeiten, um codieren/decodieren dieser Daten hin und her aus der Datenbank für den Benutzer, aber Sie alle erfordern viel code:
- Verwenden Sie eine helper-Funktion zum konvertieren das Datum vor dem speichern und nach dem abrufen (sehr umständlich, erfordert viel code)
- Erstellen Sie ein separates Attribut für jedes Attribut "Datum", und verwenden Sie die
setNameAttribute
undgetNameAttribute
Verfahren zum decodieren/codieren (auch umständlich und hässlich, erfordert zusätzliche übersetzungen/Regeln für die einzelnen Attribut) - JavaScript verwenden, konvertieren Sie die Daten beim laden und Absenden des Formulars (nicht sehr zuverlässig)
Also, was ist die effizienteste Methode zum abrufen, speichern und validieren von Daten und Zeiten von den user?
- Haben Sie sich, wenn Sie könnten erreichen, was Sie wollen mit Carbon-das ist in laravel ?
- Parsen der Daten selbst ist nicht das problem, ich habe bereits verwenden Carbon für, die. Das problem ist, wo um den code zu konvertieren, die Termine, die ich nicht wollen, fügen Tonnen zu wiederholen, die den conversion-code in meinen Controller/views. Auch Kohlenstoff löst eine Ausnahme aus, wenn Sie versuchen, um ein Datum zu analysieren, das hat ein Falsches format, das ist nicht ideal, wenn der Umgang mit Benutzereingaben.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Irgendwann, müssen Sie konvertieren Sie das Datum aus dem anzeigen-format im format der Datenbank. Wie Sie bereits erwähnt, gibt es eine Reihe von Orten, um dies zu tun, im Grunde die Wahl zwischen dem back-end oder front-end.
Ich die Konvertierung auf client-Seite (front-end) mit javascript (Sie können http://momentjs.com um dabei zu helfen). Der Grund dafür ist, dass müssen Sie möglicherweise verschiedene Formate je nach Gebietsschema des client (im browser eingestellte oder in seinen Profil-Einstellungen zum Beispiel). Tun Sie das format-Konvertierung in das front-end ermöglicht es Ihnen, zu konvertieren, um diese unterschiedliche Datum-Formate problemlos.
Ein weiterer Vorteil ist, dass Sie dann verwenden können, die
protected $dates
Eigenschaft in Ihrem Modell zu haben Laravel Griff (get und set) diese Termine automatisch wie ein Carbon-Objekt, ohne die Notwendigkeit für Sie, dies zu tun (siehe https://github.com/laravel/framework/blob/master/src/Illuminate/Database/Eloquent/Model.php#L126).Als für die Validierung müssen Sie dann verwenden können, Laravel eingebaute Validierungsregeln für die Daten, wie diese:
Während der client-Seite ist gut für die UX, es lässt Sie nicht sicher sein, alles wird gut.
Irgendwann müssen Sie server-seitige Validierung/Konvertierung sowieso.
Aber hier ist das Ding, es ist so einfach wie diese:
et voila!
Offensichtlich, Sie können brillante Carbon, um es noch einfacher:
Validierung
Ihnen sagen, dass Carbon-wirft exception, wenn der mit falschen Eingaben. Natürlich, aber hier ist, was Sie brauchen, um zu überprüfen das Datum:
Diese regex-Teil ist notwendig, wenn Sie möchten, stellen Sie sicher, Jahr Teil ist 4digit, da würde PHP prüfen, Datum
01-02-14
gültig, trotz der Verwendung vonY
- format-Zeichen (making year =0014
).Der beste Weg, ich fand, ist das überschreiben der
fromDateTime
ausEloquent
.Ich bin neu in PHP, also ich weiß nicht, ob es der beste Ansatz.
Hoffe, es hilft.
Edit:
Natürlich, denken Sie daran, alle Ihre Daten Eigenschaften in
dates
in Ihrem Modell. eg: