При створенні 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, що особливо важливо для конфігураційних даних і структур "ключ-значення"