api-platformmake-processor
Génère un State Processor API Platform pour personnaliser la persistence des données
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Génère un State Processor API Platform pour personnaliser la persistence des 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 Provider API Platform pour personnaliser la récupération de 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-processor |
| description | Génère un State Processor API Platform pour personnaliser la persistence des 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 Processor personnalisé pour API Platform. Les processors sont responsables de la persistence des données pour les opérations d'écriture (POST, PUT, PATCH, DELETE).
src/State/{ResourceName}Processor.phpIMPORTANT : Exécute ce workflow étape par étape :
$ARGUMENTS est fourni, utiliser comme nom de la resourceQuestion: "Pour quelle resource créer un State Processor ?"
Header: "Resource"
src/Entity/{ResourceName}.php ou src/ApiResource/{ResourceName}.php avec GlobQuestion: "Quelle stratégie de processing ?"
Header: "Stratégie"
Options:
- "Décorer Doctrine (Recommandé)" : "Ajouter de la logique avant/après la persistence Doctrine"
- "Custom complet" : "Logique de persistence entièrement personnalisée"
- "Messenger (async)" : "Dispatcher un message Symfony Messenger au lieu de persister directement"
Question: "Quelles opérations le processor doit-il gérer ?"
Header: "Opérations"
Options:
- "Création (POST)" : "Logique spécifique à la création de la resource"
- "Mise à jour (PUT/PATCH)" : "Logique spécifique à la modification"
- "Suppression (DELETE)" : "Logique spécifique à la suppression (soft delete, cascade, etc.)"
composer.json avec Readautoload.psr-4Processor décorant Doctrine :
<?php
declare(strict_types=1);
namespace {namespace}\State;
use ApiPlatform\Metadata\DeleteOperationInterface;
use ApiPlatform\Metadata\Operation;
use ApiPlatform\State\ProcessorInterface;
/**
* @implements ProcessorInterface<{ResourceName}, {ResourceName}|void>
*/
final readonly class {ResourceName}Processor implements ProcessorInterface
{
public function __construct(
private ProcessorInterface $decorated,
) {
}
public function process(mixed $data, Operation $operation, array $uriVariables = [], array $context = []): mixed
{
if ($operation instanceof DeleteOperationInterface) {
return $this->processDelete($data, $operation, $uriVariables, $context);
}
// Logique avant persistence
$this->beforePersist($data, $operation, $context);
$result = $this->decorated->process($data, $operation, $uriVariables, $context);
// Logique après persistence
$this->afterPersist($result, $operation, $context);
return $result;
}
private function beforePersist(mixed $data, Operation $operation, array $context): void
{
// Ex: enrichir les données, valider, auditer
}
private function afterPersist(mixed $result, Operation $operation, array $context): void
{
// Ex: envoyer un email, dispatcher un event, invalider un cache
}
private function processDelete(mixed $data, Operation $operation, array $uriVariables, array $context): void
{
// Ex: soft delete au lieu de suppression physique
$this->decorated->process($data, $operation, $uriVariables, $context);
}
}
Processor avec Messenger :
<?php
declare(strict_types=1);
namespace {namespace}\State;
use ApiPlatform\Metadata\Operation;
use ApiPlatform\State\ProcessorInterface;
use Symfony\Component\Messenger\MessageBusInterface;
use {namespace}\Message\Create{ResourceName}Message;
/**
* @implements ProcessorInterface<{ResourceName}, {ResourceName}>
*/
final readonly class {ResourceName}Processor implements ProcessorInterface
{
public function __construct(
private MessageBusInterface $messageBus,
) {
}
public function process(mixed $data, Operation $operation, array $uriVariables = [], array $context = []): mixed
{
$this->messageBus->dispatch(new Create{ResourceName}Message($data));
return $data;
}
}
# config/services.yaml
services:
App\State\{ResourceName}Processor:
arguments:
$decorated: '@api_platform.doctrine.orm.state.persist_processor'
# Pour la suppression :
# $decorated: '@api_platform.doctrine.orm.state.remove_processor'
#[ApiResource] :#[ApiResource(
processor: {ResourceName}Processor::class,
)]
State Processor {ResourceName}Processor généré
Fichiers créés :
- src/State/{ResourceName}Processor.php
Configuration requise :
- Vérifier config/services.yaml (si décoration Doctrine)
Prochaines étapes :
- Implémenter la logique métier dans process()
- Créer le provider associé : /api-platform:make-provider {ResourceName}
- Tester : /api-platform:make-test {ResourceName}
ProcessorInterfacefinal readonlyDeleteOperationInterface pour détecter les suppressions