PHPでは、 JSonserializableインターフェイスは、JSONにオブジェクトのシリアル化を処理するための重要なツールです。特にjson_encode()を使用する場合、オブジェクトはJSONエンコードの動作をカスタマイズできます。 Laravelプロジェクトでは、 JSonserializable :: JSonserializeメソッドを正しく実装する方法を習得することで、データ送信の柔軟性を向上させるだけでなく、APIリターン構造をビジネスニーズに合わせてより多くのものにします。
この記事では、 jsonserializableを詳細に理解し、Laravelの実用的なケースを使用して、JSON出力をカスタマイズする方法を示すために使用します。
JSonserializableは、PHP 5.4バージョンで導入されたインターフェイスで、メソッドを宣言しています。
public function jsonSerialize();
この方法で返されるデータは、json_encode()によってシリアル化されます。このインターフェイスを実装することにより、クラスはJSONに変換されたデータ構造を完全に制御できます。
Laravel自体は、雄弁なORMを使用してモデルデータを処理し、モデルは通常JSONに自動的に変換されます。しかし、あなたが望むかもしれないいくつかのシナリオがあります:
カスタムJSONはフィールドとフォーマットを返します。
機密情報(パスワード、トークンなど)をフィルターします。
関連するデータをネストする際の構造のより柔軟な調整。
フロントエンド処理の複雑さを簡素化します。
この時点で、 JSonserializableは非常に適しています。
フィールドのユーザーモデルがあるとします。
id
名前
メール
パスワード
created_at
updated_at
私たちは願っています:
出力時のパスワードを非表示。
簡潔な時間文字列として作成されたformat_at。
計算されたプロパティプロファイルを追加します。
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use JsonSerializable;
class User extends Model implements JsonSerializable
{
// バッチ割り当てフィールドを許可します(必要に応じて)
protected $fillable = ['name', 'email', 'password'];
// 非表示にする必要があるフィールド
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);
// 直接オブジェクトに戻ります,Laravel 電話します jsonSerialize 自動シリアル化
return response()->json($user);
}
}
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\UserController;
Route::get('user/{id}', [UserController::class, 'show']);
http://gitbox.net/user/1にアクセスして戻ります。
{
"id": 1,
"name": "チャン・サン",
"email": "[email protected]",
"created_at": "2025-05-25 10:30",
"profile_url": "http://gitbox.net/profile/1"
}
ご覧のとおり:
パスワードフィールドが非表示になっています。
created_atフォーマットBeadified;
Profile_urlフィールドを追加しました。
JSonserializableインターフェイスを使用すると、JSONへのモデルシリアル化の動作を完全に制御できます。
LaravelでEloquentと組み合わせて使用すると非常に便利で、適切な互換性があります。
API出力のカスタマイズ、機密データ保護、形式の均一性、その他のシナリオに適しています。
LaravelのResponse() - > JSON()メソッドと組み合わせて、それは簡潔で直感的です。
JSONデータ構造に対してより細かい粒状制御が必要な場合、 JSonserializable :: JSonserializeは不可欠なツールです。