En PHP, l'interface JSonSerialisable est un outil important pour gérer la sérialisation des objets à JSON. Il permet aux objets de personnaliser le comportement du codage JSON, en particulier lors de l'utilisation de JSON_ENCODOD () . Dans le projet Laravel, la maîtrise de la façon d'implémenter correctement la méthode JSonSerializable :: JSonSerialize peut non seulement améliorer la flexibilité de la transmission des données, mais également rendre la structure de retour de l'API plus conforme aux besoins de l'entreprise.
Cet article vous emmènera pour comprendre JSonSerializable en profondeur et utiliser un cas pratique Laravel pour montrer comment l'appliquer pour personnaliser la sortie JSON.
JSonSerializable est une interface introduite dans la version PHP 5.4, déclarant une méthode:
public function jsonSerialize();
Les données renvoyées par cette méthode seront utilisées comme sérialisées par JSON_ENCODE () . En implémentant cette interface, la classe peut contrôler complètement la structure de données convertie en JSON.
Laravel lui-même utilise un ORM éloquent pour traiter les données du modèle, et le modèle est généralement converti automatiquement en JSON. Mais il y a des scénarios que vous voudrez peut-être:
JSON personnalisé renvoie des champs et des formats;
Informations sensibles au filtre (telles que les mots de passe, les jetons);
Ajustement plus flexible de la structure lors de la nidification des données associées;
Simplifiez la complexité du traitement frontal.
À l'heure actuelle, JSonSerializable est très approprié.
Supposons que nous ayons un modèle utilisateur avec des champs:
identifiant
nom
mot de passe
créé_at
Updated_at
Nous espérons:
Masquer le mot de passe lors de la sortie;
Format créé_at comme une chaîne de temps concise;
Ajoutez un profil de propriété calculé_url.
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use JsonSerializable;
class User extends Model implements JsonSerializable
{
// Autoriser les champs d'attribution par lots(Au besoin)
protected $fillable = ['name', 'email', 'password'];
// Champs qui doivent être cachés
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);
// Retour à l'objet directement,Laravel Appellera jsonSerialize Sérialisation automatique
return response()->json($user);
}
}
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\UserController;
Route::get('user/{id}', [UserController::class, 'show']);
Visitez http://gitbox.net/user/1 pour retourner:
{
"id": 1,
"name": "Zhang San",
"email": "[email protected]",
"created_at": "2025-05-25 10:30",
"profile_url": "http://gitbox.net/profile/1"
}
Vous pouvez voir:
Le champ de mot de passe est caché;
Création de format Embellifié;
Ajout de champ de profil_url .
L'interface JSonSerializable vous permet de contrôler pleinement le comportement de la sérialisation du modèle en JSON;
Il est très pratique à utiliser en combinaison avec Eloquent dans Laravel et a une bonne compatibilité;
Convient pour la personnalisation de la sortie de l'API, la protection sensible des données, l'uniformité du format et d'autres scénarios;
En conjonction avec la méthode Response () -> JSON () de Laravel, il est concis et intuitif.
Si vous avez besoin d'avoir un contrôle granulaire plus fin sur les structures de données JSON, JSonSerializable :: jSonSerialize est un outil indispensable.