Maison >développement back-end >tutoriel php >Contrôle dynamique de la réponse à l'API dans les ressources Laravel

Contrôle dynamique de la réponse à l'API dans les ressources Laravel

Emily Anne Brown
Emily Anne Brownoriginal
2025-03-06 01:42:13141parcourir

Dynamic API Response Control in Laravel Resources

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
  • : Contient des attributs uniquement s'ils existent sur le modèle whenHas()
Ce qui suit est un exemple d'utilisation des propriétés conditionnelles:

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),
        ];
    }
}
Explorons un exemple pratique d'une API de catalogue avec des données conditionnelles:

<?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()
            ),
        ];
    }
}
Les propriétés conditionnelles de la ressource API Laravel vous permettent de créer des réponses contextuelles tout en gardant votre code simple et facile à maintenir.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn