現在の位置: ホーム> 最新記事一覧> Jsonserializable :: Jsonserialize関数の実際の適用Laravel

Jsonserializable :: Jsonserialize関数の実際の適用Laravel

gitbox 2025-05-28

PHPでは、 JSonserializableインターフェイスは、JSONにオブジェクトのシリアル化を処理するための重要なツールです。特にjson_encode()を使用する場合、オブジェクトはJSONエンコードの動作をカスタマイズできます。 Laravelプロジェクトでは、 JSonserializable :: JSonserializeメソッドを正しく実装する方法を習得することで、データ送信の柔軟性を向上させるだけでなく、APIリターン構造をビジネスニーズに合わせてより多くのものにします。

この記事では、 jsonserializableを詳細に理解し、Laravelの実用的なケースを使用して、JSON出力をカスタマイズする方法を示すために使用します。


1。Jsonserializableは何ですか?

JSonserializableは、PHP 5.4バージョンで導入されたインターフェイスで、メソッドを宣言しています。

 public function jsonSerialize();

この方法で返されるデータは、json_encode()によってシリアル化されます。このインターフェイスを実装することにより、クラスはJSONに変換されたデータ構造を完全に制御できます。


2. LaravelプロジェクトでJsonserializableを使用する必要があるのはなぜですか?

Laravel自体は、雄弁なORMを使用してモデルデータを処理し、モデルは通常JSONに自動的に変換されます。しかし、あなたが望むかもしれないいくつかのシナリオがあります:

  • カスタムJSONはフィールドとフォーマットを返します。

  • 機密情報(パスワード、トークンなど)をフィルターします。

  • 関連するデータをネストする際の構造のより柔軟な調整。

  • フロントエンド処理の複雑さを簡素化します。

この時点で、 JSonserializableは非常に適しています。


3。実用的なケース:LaravelモデルにJSonserializableの実装

フィールドのユーザーモデルがあるとします。

  • id

  • 名前

  • メール

  • パスワード

  • created_at

  • updated_at

私たちは願っています:

  • 出力時のパスワードを非表示。

  • 簡潔な時間文字列として作成されたformat_at。

  • 計算されたプロパティプロファイルを追加します。

1.ユーザーモデルを変更して、JSonserializableを実装します

<?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),
        ];
    }
}

2。コントローラーでJSONを返します

<?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);
    }
}

3。ルーティング構成

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\UserController;

Route::get('user/{id}', [UserController::class, 'show']);

4。操作結果の例

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フィールドを追加しました。


5。概要

  • JSonserializableインターフェイスを使用すると、JSONへのモデルシリアル化の動作を完全に制御できます。

  • LaravelでEloquentと組み合わせて使用​​すると非常に便利で、適切な互換性があります。

  • API出力のカスタマイズ、機密データ保護、形式の均一性、その他のシナリオに適しています。

  • LaravelのResponse() - > JSON()メソッドと組み合わせて、それは簡潔で直感的です。

JSONデータ構造に対してより細かい粒状制御が必要な場合、 JSonserializable :: JSonserializeは不可欠なツールです。