In PHP ist die JsonSerializable -Schnittstelle ein wichtiges Instrument zur Handhabung der Serialisierung von Objekten mit JSON. Es ermöglicht Objekten, das Verhalten der JSON -Codierung anzupassen, insbesondere bei Verwendung von JSON_Encode () . Im Laravel -Projekt kann das Beherrschen der korrekten Implementierung der JsonSerializable :: JsonSerialize -Methode nicht nur die Flexibilität der Datenübertragung verbessern, sondern auch die API -Renditestruktur im Einklang mit den geschäftlichen Anforderungen verbessern.
In diesem Artikel werden Sie JsonSerializable ausführlich verstehen und einen Praktischen Fall Laravel verwenden, um zu zeigen, wie Sie ihn anwenden, um die JSON -Ausgabe anzupassen.
JsonSerializable ist eine Schnittstelle, die in der PHP 5.4 -Version eingeführt wird und eine Methode erklärt:
public function jsonSerialize();
Die nach dieser Methode zurückgegebenen Daten werden von json_encode () als serialisiert verwendet. Durch die Implementierung dieser Schnittstelle kann die Klasse die in JSON konvertierte Datenstruktur vollständig steuern.
Laravel selbst verwendet eloquente ORM, um Modelldaten zu verarbeiten, und das Modell wird normalerweise automatisch in JSON konvertiert. Aber es gibt einige Szenarien, die Sie vielleicht möchten:
Custom JSON gibt Felder und Formate zurück;
Filtern sensible Informationen (z. B. Passwörter, Token);
Flexiblere Strukturanpassung beim Verschachteln der damit verbundenen Daten;
Vereinfachen Sie die Komplexität der Front-End-Verarbeitung.
Zu diesem Zeitpunkt ist JsonSerializable sehr geeignet.
Angenommen, wir haben ein Benutzermodell mit Feldern:
Ausweis
Name
Passwort
erstellt_at
updated_at
Wir hoffen:
Kennwort beim Ausgabe ausblenden;
Format erstellt_at als kurze Zeitzeichenfolge;
Fügen Sie ein Computer -Eigenschaftsprofil hinzu.
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use JsonSerializable;
class User extends Model implements JsonSerializable
{
// Stapelzuordnungsfelder zulassen(Nach Bedarf)
protected $fillable = ['name', 'email', 'password'];
// Felder, die versteckt werden müssen
protected $hidden = ['password'];
public function jsonSerialize()
{
return [
'id' => $this->id,
'name' => $this->name,
'email' => $this->email,
'created_at' => $this->created_at->format('Y-m-d H:i'),
'profile_url' => url('gitbox.net/profile/' . $this->id),
];
}
}
<?php
namespace App\Http\Controllers;
use App\Models\User;
class UserController extends Controller
{
public function show($id)
{
$user = User::findOrFail($id);
// Kehren Sie direkt zum Objekt zurück,Laravel Wird anrufen jsonSerialize Automatische Serialisierung
return response()->json($user);
}
}
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\UserController;
Route::get('user/{id}', [UserController::class, 'show']);
Besuchen Sie http://gitbox.net/user/1 , um zurückzugeben:
{
"id": 1,
"name": "Zhang San",
"email": "[email protected]",
"created_at": "2025-05-25 10:30",
"profile_url": "http://gitbox.net/profile/1"
}
Sie können sehen:
Das Feld Passwort ist versteckt;
erstellt_at Format verschönert;
Profil_url Feld hinzugefügt.
Mit der JsonSerializable -Schnittstelle können Sie das Verhalten der Modellserialisierung auf JSON vollständig steuern.
Es ist sehr bequem in Kombination mit eloquent in Laravel und eine gute Kompatibilität.
Geeignet für die API -Ausgangsanpassung, der sensible Datenschutz, die Gleichmäßigkeit der Format und andere Szenarien;
In Verbindung mit der Reaktion von Laravel ()-> json () ist es prägnant und intuitiv.
Wenn Sie eine feinere granulare Kontrolle über JSON -Datenstrukturen benötigen, ist JsonSerializable :: Jsonserialize ein unverzichtbares Werkzeug.