2016-04-07 14 views
2

Unsere beredten Modelle haben Attribute, die der Laravel-Schlangenfallkonvention folgen.Eloquente Modellattribute als Kamelfall [Laravel 5.2] [Dingo API]

z.B. first_name, last_name und created_at

Obwohl mein Frontend (reagieren) folgt der Javascript Camel Case Standard.

z.B. firstName, lastName und createdAt

Gibt es eine einfache Möglichkeit zum Konvertieren aller Attribute in Camel Case beim Senden einer API-Antwort?

Wir verwenden Larave 5.2 und das Dingo-API-Paket.


UPDATE

von der akzeptierten Antwort Im Anschluss an habe ich den Benutzerdefinierte Antwortformat Ansatz. Sehen Sie im folgenden Kern für die Umsetzung (enthält Unit-Tests):

https://gist.github.com/andrewmclagan/c5e0fe601d23f3b859b89a9f8922be68

Antwort

2

Sie haben wirklich ein paar Optionen. Ich steige nicht in deren Umsetzung (es sei denn, erforderlich), aber hier sind ein paar, die ich denken kann:

In Laravel:

  • Aufschalten der toArray() Methode auf dem Modell. Wenn ein Modell in JSON konvertiert wird, ruft es toArray() auf. Mit dieser Methode können Sie alle Schlüssel von camelCase durchsuchen und konvertieren. Sie müssten dies jedoch für jedes Modell überschreiben, aber dies kann durch eine Elternklasse oder ein Merkmal abstrahiert werden.

In Dingo:

  • Verwenden Transformers mit dem Response Builder. Sie könnten einen Transformator für jedes Modell erstellen, oder Sie könnten einen CamelTransformer und register mit jedem Modell erstellen. Sie würden die Schlüssel in CamelCase im Transformator konvertieren.

  • Erstellen Sie eine Custom Response Format. Sie können ein Antwortformat camelJson erstellen, das das Standard-JSON-Format erweitert. Überschreiben Sie die notwendigen Methoden mit der Logik zu camelCase die Schlüssel.

  • Verwenden Sie die ResponseWasMorphed event. Sie können einen Event-Handler für das Ereignis ResponseWasMorphed erstellen und Ihre Schlüssel dort eingeben und camelCase.

Jede dieser Optionen sollen den Job erledigen kann, es ist nur eine Frage, wie globale oder körniger Sie diese Transformationen wollen. Wenn Sie beispielsweise toArray() ändern, wirkt sich dies auf den gesamten Code aus, der Ihr Modell in ein Array (oder JSON) konvertiert, nicht nur auf Ihren Antwortcode. Daher ist es möglicherweise nicht erwünscht, dass Ihre Änderung so global ist.

Ich würde denken, dass das benutzerdefinierte Antwortformat wahrscheinlich die beste Kombination aus Leichtigkeit und Angemessenheit für Ihre Situation ist.

+1

Genau das, was ich wollte, danke. In der Mitte Ihrer Erklärung dachte ich auch, dass "Custom Response Format" der Schlüssel ist !! Vielen Dank! – AndrewMcLagan

0

Tun Sie dies nicht. Der Server muss nichts über seine Clients wissen. Wenn Ihre React-Anwendung Eigenschaften in Camel Case verarbeiten muss, delegieren Sie diese Aufgabe an den Client. Sie sollten einen Punkt im System haben, an dem alle Anfragen weitergeleitet werden. Das ist der richtige Ort, an dem der Client ihn sofort nach Erhalt der Antwort umwandeln muss.