Nutzen wir zum Beispiel Larvel als Backend und beliefern das Frontend via api Route mit Daten, dann stellt sich manchmal die Frage, welche Daten braucht das Frontend eigentlich? Braucht man wirklich created_at oder updated_at mit auszuliefern?
Sobald man sich so eine oder ähnliche Frage stellt wird es Zeit sich mal mit Laravel Resource auseinander zu setzen. Ich nehme mal stark an, dass wenn ihr diese Zeilen ließt, über die Suchmaschine auf diesen Text gestoßen seid. Also habt ihr euch die Frage mit Sicherheit vor kurzem erst gestellt.
Lange Rede und kein Sinn. Gehen wir mal über zum praktischem Teil. Wir wollen einer Api anfrage nur bestimmte Felder mitliefern. Klassisches Beispiel, wir haben ein Blog. Und im Listing brauchen wir eigentlich nur: Title, Slug, Teaser.
Im Api/PostController unter der index() Funktion steht erstmal nur:
public function index() {
return Post::all();
}
Um nur die oben genannten Felder auszuliefern, benötigen wir ein PostResource Klasse. Die erstellen wir mit artisan in der Kommandozeile.
php artisan make:resource PostResource
Artisan legt mit diesem Befehl eine Datei unter app/Http/Resources ab. Und zwar die PostResource.php. Diese hat eine öffentliche Funktion toArray($request). In der löschen wir die aktuelle Rückgabe : parent::toArray($request); und schreiben ein Array mit den gewünschten Felder die wir dann returnen wollen.
return [
‘id‘ => $this→id,
‘title‘ => $this→title,
‘slug‘ => $this→slug,
‘teaser‘ => \Illuminate\Support\Str::limit($this→content, 20),
];
Das $this ist das aktuelle PostModel.
Nun wechseln wir wieder in unseren PostController und schreiben die aktuelle index Funktion um.
public function index() {
return PostResource::collection(Post::all());
}
And viola!