Збереження ключів колекції в API-ресурсах Laravel

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 20 грудня, 2024
Чи знаєте ви, як зберегти значення ключів у ваших API-відповідях при розробці на Laravel? Дізнайтеся, як використовувати властивість preserveKeys, щоб зберегти структуру даних і підтримати зрозумілість вашого коду в нашому новому блозі

При створенні API на Laravel за замовчуванням повторно індексує колекції ресурсів чисельно. Однак для випадків, коли оригінальні ключі мають значення, властивість preserveKeys допомагає зберегти первісну структуру даних.

<?php
 
namespace App\Http\Resources;
 
use Illuminate\Http\Resources\Json\JsonResource;
 
class KeyValueResource extends JsonResource
{
    public $preserveKeys = true; 
 
    public function toArray($request)
    {
        return [
            'value' => $this->value,
            'updated_at' => $this->updated_at,
            'metadata' => $this->metadata
        ];
    }
}

Ось приклад того, як це може виглядати у ваших застосунках на Laravel.

<?php
 
namespace App\Http\Controllers;
 
use App\Models\Setting;
use App\Http\Resources\SettingResource;
 
class SettingController extends Controller
{
    public function index()
    {
        $settings = Setting::all()->keyBy('key');
 
        return SettingResource::collection($settings);
    }
}
 
class SettingResource extends JsonResource
{
    public $preserveKeys = true;
 
    public function toArray($request)
    {
        return [
            'value' => $this->formatValue(),
            'type' => $this->type,
            'last_updated' => $this->updated_at->toDateTimeString(),
            'editable' => $this->is_editable
        ];
    }
}

В результаті ви отримаєте відповідь у такому форматі:

{
    "data": {
        "app_name": {
            "value": "My Application",
            "type": "string",
            "last_updated": "2024-03-15 10:30:00",
            "editable": true
        },
        "max_upload_size": {
            "value": 10485760,
            "type": "integer",
            "last_updated": "2024-03-15 10:30:00",
            "editable": true
        }
    }
}

Властивість preserveKeys гарантує збереження значущих ключів у відповідях вашого API, що особливо важливо для конфігураційних даних і структур "ключ-значення"