Apabila membina API, anda sering perlu menyesuaikan respons anda berdasarkan senario yang berbeza -contohnya, hanya memaparkan medan tertentu kepada pentadbir, hanya termasuk data yang relevan apabila diminta, atau menyesuaikan format tindak balas berdasarkan titik akhir. Sumber API Laravel menyediakan cara yang kuat untuk mengendalikan situasi ini melalui sifat bersyarat.
beberapa kaedah utama yang tersedia ialah:
when()
whenLoaded()
whenNotNull()
whenHas()
mari kita meneroka contoh praktikal API katalog dengan data bersyarat:
use Illuminate\Http\Request; use Illuminate\Http\Resources\Json\JsonResource; class UserResource extends JsonResource { public function toArray(Request $request): array { return [ 'id' => $this->id, 'name' => $this->name, 'email' => $this->when($request->user()->isAdmin(), $this->email), ]; } }
Ciri-ciri bersyarat dalam sumber API Laravel membolehkan anda membina respons yang menyedari konteks sambil mengekalkan kod anda mudah dan mudah dikekalkan.
<?php namespace App\Http\Resources; use Illuminate\Http\Request; use Illuminate\Http\Resources\Json\JsonResource; class ProductResource extends JsonResource { public function toArray(Request $request): array { return [ 'id' => $this->id, 'name' => $this->name, 'slug' => $this->slug, 'price' => $this->price, // 仅在详细视图中包含完整描述 'description' => $this->when( $request->route()->named('products.show'), $this->description, $this->excerpt ), // 为已认证的用户包含库存信息 'stock_level' => $this->when( $request->user()?->can('view-inventory'), $this->stock_count ), // 加载时包含关系 'category' => new CategoryResource($this->whenLoaded('category')), // 有条件地包含计数 'reviews_count' => $this->when( $request->include_counts, $this->reviews_count ), // 包含管理员数据 'profit_margin' => $this->when( $request->user()?->isAdmin(), fn() => $this->calculateProfitMargin() ), ]; } }
Atas ialah kandungan terperinci Kawalan tindak balas API dinamik dalam sumber Laravel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!