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