Ich schreibe eine ziemlich einfache App, die Backbone.js Modelle und Laravel 4 Modelle synchronisiert. Problem entsteht, wenn ich die Laravel-Modelle Carbon -Daten involviere. Mein Laravel-Controller sieht so aus:
%Vor%Dies antwortet erfolgreich mit einer JSON-Darstellung von $ order, die die Client-Seite verwendet, um synchron zu bleiben. Carbon-Daten werden jedoch als Carbon-Objektdarstellung wie folgt zurückgegeben:
%Vor% Ich könnte es recht einfach als JavaScript-Date-Objekt interpretieren, aber wenn dieses Objekt wieder in Laravel geht, entfernt JSON die Carbon
-Klasse und Eloquent kann das nicht als Datum lesen:
Also muss ich entweder:
Carbon
-Klassenstruktur in Daten zu interpretieren. Zunächst schlage ich vor, dass Sie die API von den Controllern trennen. Verwenden Sie Ressourcen für API-Aufrufe.
Für das Objekt, das an Laravel zurückgegeben wird, weiß ich nicht, wie Sie es verarbeiten, um den Fehler zu erhalten, aber Sie sollten eine neue Carbon-Instanz initiieren, wenn Sie ein Carbon-Datum haben möchten. Sonst könntest du das Datum einfach als String zurückgeben, Laravels Model übernimmt den Rest.
Vorausgesetzt das zurückgegebene Objekt ist:
%Vor%Und die Variable $ data hat die aktuelle Antwort, Sie könnten einfach delivered_at:
überschreiben %Vor%Oder wenn Sie ein Carbon-Objekt möchten:
%Vor% Das könnte etwas spät kommen, aber ich benutze normalerweise Accessoren und Mutatoren, um dies zu erreichen. Wenn beispielsweise alle Felder created_at
und updated_at
immer im ATOM-Format zurückgegeben werden sollen, erzeuge ich eine Basismodellklasse, die Eloquent
erweitert, die jedes andere Modell erbt:
Wie Sie mit Daten in Backbone und Laravel umgehen, wird sich auswirken.
Sie müssen ein Datumsformat auswählen und dabei bleiben. Stellen Sie dann sicher, dass beide Seiten in dieses Format konvertiert werden, wenn Sie Daten an den JS und Controller weiterleiten.
Wenn Sie ein reines JavasScript-Date-Objekt senden, gibt es eine Datumszeichenfolge zurück, die wie folgt aussieht: "Sat Apr 19 2014 00:00:00 GMT+0200 (South Africa Standard Time)"
Was nicht so schön ist, da PHP strtotime
es zu einem funky parsiert.
Hier ist ein Beispiel:
%Vor%Warum dieses Datum? vielleicht kann jemand anderes besser arbeiten, als ich kann. Sie können ein benutzerdefiniertes Datumsformat verwenden, um es richtig zu lesen, aber verwenden Sie ein Format, das beide verstehen können.
Wie ISO8601
%Vor%Und in php sollte Carbon ohne Probleme damit umgehen können
Wenn Sie die Datumsspalte Ihres Modells ( created_at
) im String-Format erhalten möchten, verwenden Sie folgendes:
dies wird sich ändern
created_at = {"date":"2014-02-25 12:55:29","timezone_type":3,"timezone":"America\/Argentina\/Buenos_Aires"}
hinein:
created_at = "2014-02-25 12:55:29"
Tags und Links javascript json backbone.js laravel-4 php-carbon