Wie werden JSON-Antworten für Modelle behandelt, die Carbon-Daten auf Laravel enthalten?

8

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:

%Vor%

Also muss ich entweder:

  1. Erweitern Sie die JsonResponse-Klasse, um Carbon-Daten in Zeichenfolgendarstellungen zu konvertieren.
  2. Erweitern Sie die Eloquent-Klasse, um StdClass-Objekte der Carbon -Klassenstruktur in Daten zu interpretieren.
  3. Tu etwas, das mir eindeutig fehlt, Laravel 4 behauptet, es sei großartig in REST, also denke ich, dass mir etwas fehlt.
Mauro 25.02.2014, 16:06
quelle

5 Antworten

2

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%     
Blue Genie 15.03.2014, 10:06
quelle
5

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:

%Vor%     
cafonso 25.08.2014 08:45
quelle
1

Dies ist vielleicht nicht das Gleiche, aber ich würde diesen Fehler bekommen, wenn ich mit Timestamps und Carbon arbeite, aber die Verwendung von strtotime () auf den Daten, die ich übergeben habe, hat mein Problem gelöst, kann Ihnen helfen.

    
Ir1sh 15.03.2014 03:27
quelle
1

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

    
WiR3D 18.03.2014 15:09
quelle
0

Wenn Sie die Datumsspalte Ihres Modells ( created_at ) im String-Format erhalten möchten, verwenden Sie folgendes:

%Vor%

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"

    
Ali Sherafat 30.06.2016 22:32
quelle