api-platformmake-provider
Génère un State Provider API Platform pour personnaliser la récupération de données
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Génère un State Provider API Platform pour personnaliser la récupération de données
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Audite un projet API Platform existant et produit un rapport de bonnes pratiques, performances et sécurité
Génère des DTOs (input/output) API Platform avec mapping vers les entités
Génère des filtres API Platform (search, date, range, order, boolean, exists, custom)
Génère un State Processor API Platform pour personnaliser la persistence des données
Génère une API Resource complète avec attribut
Génère des tests fonctionnels API Platform (PHPUnit/ApiTestCase) pour une resource
| name | api-platform:make-provider |
| description | Génère un State Provider API Platform pour personnaliser la récupération de données |
| argument-hint | <nom-resource> |
| model | sonnet |
| allowed-tools | ["AskUserQuestion","Bash","Read","Write","Edit","Grep","Glob"] |
| version | 1.0.0 |
| license | MIT |
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)Paginator