From api-platform
Génère un State Provider API Platform pour personnaliser la récupération de données
How this skill is triggered — by the user, by Claude, or both
Slash command
/api-platform:make-providersonnetThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Génère un State Provider personnalisé pour API Platform. Les providers sont responsables de la récupération des données pour les opérations de lecture (GET, GetCollection).
Génère un State Provider personnalisé pour API Platform. Les providers sont responsables de la récupération des données pour les opérations de lecture (GET, GetCollection).
src/State/{ResourceName}Provider.phpIMPORTANT : Exécute ce workflow étape par étape :
$ARGUMENTS est fourni, utiliser comme nom de la resourceQuestion: "Pour quelle resource créer un State Provider ?"
Header: "Resource"
src/Entity/{ResourceName}.php ou src/ApiResource/{ResourceName}.php avec Glob/api-platform:make-resourceQuestion: "Quel type de provider créer ?"
Header: "Type"
Options:
- "Complet (Recommandé)" : "Gère à la fois les items (Get) et les collections (GetCollection)"
- "Item uniquement" : "Gère uniquement la récupération d'un item (Get)"
- "Collection uniquement" : "Gère uniquement la récupération de collections (GetCollection)"
Question: "Quelle est la source de données ?"
Header: "Source"
Options:
- "Doctrine (Recommandé)" : "Décorer le provider Doctrine existant pour ajouter de la logique"
- "Service externe" : "API tierce, microservice, ou autre source"
- "Custom" : "Logique métier complexe, agrégation de sources multiples"
composer.json avec Readautoload.psr-4App par défautProvider décorant Doctrine :
<?php
declare(strict_types=1);
namespace {namespace}\State;
use ApiPlatform\Metadata\CollectionOperationInterface;
use ApiPlatform\Metadata\Operation;
use ApiPlatform\State\ProviderInterface;
/**
* @implements ProviderInterface<{ResourceName}>
*/
final readonly class {ResourceName}Provider implements ProviderInterface
{
public function __construct(
private ProviderInterface $decorated,
) {
}
public function provide(Operation $operation, array $uriVariables = [], array $context = []): object|array|null
{
if ($operation instanceof CollectionOperationInterface) {
return $this->provideCollection($operation, $uriVariables, $context);
}
return $this->provideItem($operation, $uriVariables, $context);
}
private function provideCollection(Operation $operation, array $uriVariables, array $context): iterable
{
$items = $this->decorated->provide($operation, $uriVariables, $context);
// Logique personnalisée sur la collection
return $items;
}
private function provideItem(Operation $operation, array $uriVariables, array $context): ?object
{
$item = $this->decorated->provide($operation, $uriVariables, $context);
// Logique personnalisée sur l'item
return $item;
}
}
Provider depuis source externe :
<?php
declare(strict_types=1);
namespace {namespace}\State;
use ApiPlatform\Metadata\CollectionOperationInterface;
use ApiPlatform\Metadata\Operation;
use ApiPlatform\State\ProviderInterface;
use {namespace}\ApiResource\{ResourceName};
/**
* @implements ProviderInterface<{ResourceName}>
*/
final readonly class {ResourceName}Provider implements ProviderInterface
{
public function __construct(
// Injecter le client HTTP ou le service métier
) {
}
public function provide(Operation $operation, array $uriVariables = [], array $context = []): object|array|null
{
if ($operation instanceof CollectionOperationInterface) {
// Récupérer et retourner la collection
return [];
}
// Récupérer et retourner un item
$id = $uriVariables['id'] ?? null;
return null;
}
}
config/services.yaml existe# config/services.yaml
services:
App\State\{ResourceName}Provider:
arguments:
$decorated: '@api_platform.doctrine.orm.state.item_provider'
# Ou pour décorer le collection provider :
# $decorated: '@api_platform.doctrine.orm.state.collection_provider'
#[ApiResource] :#[ApiResource(
provider: {ResourceName}Provider::class,
)]
State Provider {ResourceName}Provider généré
Fichiers créés :
- src/State/{ResourceName}Provider.php
Configuration requise :
- Vérifier config/services.yaml (si décoration Doctrine)
Resource mise à jour :
- provider: {ResourceName}Provider::class ajouté
Prochaines étapes :
- Implémenter la logique métier dans provide()
- Créer le processor associé : /api-platform:make-processor {ResourceName}
- Tester : /api-platform:make-test {ResourceName}
ProviderInterfacefinal readonlyCollectionOperationInterface pour distinguer item/collectionProviderInterface<ResourceName>null pour un item non trouvé (API Platform gère le 404)Paginatornpx claudepluginhub atournayre/claude-personas --plugin api-platformCreates state providers for read operations in API Platform's CQRS-style provider/processor split. Use for custom retrieval, computed fields, DTO transformation, or decorating Doctrine providers.
Implements API Platform v4 State Providers and Processors using ProviderInterface/ProcessorInterface to decouple data retrieval and persistence from entities, with contract enforcement and validation.
Generates REST APIs with CRUD endpoints, pagination, filtering, auth, tests for Express, FastAPI, Spring Boot, Gin from OpenAPI specs or schemas.