Les ressources de l'API Laravel fournissent un moyen élégant d'inclure conditionnellement les propriétés dans les réponses, vous permettant de créer des API flexibles et efficaces en fonction des différents contextes et autorisations.
Lors de la création d'API, vous devez souvent personnaliser vos réponses en fonction de différents scénarios - par exemple, affichez uniquement certains champs aux administrateurs, n'incluez pas les données pertinentes ou ajustez le format de réponse en fonction des critères d'évaluation. Les ressources API de Laravel offrent un moyen puissant de gérer ces situations à travers des propriétés conditionnelles.
Certaines méthodes clés disponibles sont:
when()
: L'attribut n'est inclus que si la condition est vraie whenLoaded()
: Contient la relation uniquement si elle a été chargée whenNotNull()
: L'attribut n'est inclus que si l'attribut n'est pas nul
whenHas()
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), ]; } }
<?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() ), ]; } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!