symfonymessage
Genere un Message Symfony Messenger avec son Handler pour traitement asynchrone
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Genere un Message Symfony Messenger avec son Handler pour traitement asynchrone
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 un State Provider API Platform pour personnaliser la récupération de données
Génère une API Resource complète avec attribut
| name | symfony:message |
| description | Genere un Message Symfony Messenger avec son Handler pour traitement asynchrone |
| model | sonnet |
| allowed-tools | ["AskUserQuestion","Bash","Read","Write","Edit","Grep","Glob"] |
| version | 1.0.0 |
| license | MIT |
Genere un Message et son MessageHandler pour le composant Symfony Messenger (traitement synchrone ou asynchrone).
src/Message/{MessageName}.phpsrc/MessageHandler/{MessageName}Handler.phpIMPORTANT : Execute ce workflow etape par etape :
Question: "Quel est le nom du message ? (ex: SendWelcomeEmail, ProcessOrder, GenerateReport)"
Header: "Message"
Question: "Quelles donnees porte le message ? Format: userId:int,email:string,orderId:string (laisser vide si aucune)"
Header: "Donnees"
Question: "Quel transport pour ce message ?"
Header: "Transport"
Options:
- "async (Recommande)" : "Traitement asynchrone via le transport par defaut (doctrine, redis, amqp...)"
- "sync" : "Traitement synchrone immediat"
- "failed" : "Recu depuis la file d'erreurs (pour retraitement)"
Question: "Quelles options activer ?"
Header: "Options"
Options:
- "Stamps" : "Ajouter des stamps personnalises (metadata sur le message)"
- "Middleware" : "Generer un middleware pour ce type de message"
- "Retry strategy" : "Configurer la strategie de retry en cas d'echec"
composer.json avec Readautoload.psr-4App par defautsrc/Message/{MessageName}.php avec Write<?php
declare(strict_types=1);
namespace {namespace}\Message;
final class {MessageName}
{
public function __construct(
private readonly int $userId,
private readonly string $email,
) {
}
public function getUserId(): int
{
return $this->userId;
}
public function getEmail(): string
{
return $this->email;
}
}
Regles de generation :
final, pas d'heritage, pas d'interfaceprivate readonly via promoted constructorsrc/MessageHandler/{MessageName}Handler.php avec Write<?php
declare(strict_types=1);
namespace {namespace}\MessageHandler;
use {namespace}\Message\{MessageName};
use Symfony\Component\Messenger\Attribute\AsMessageHandler;
#[AsMessageHandler]
final class {MessageName}Handler
{
public function __construct(
// Injecter les services necessaires
) {
}
public function __invoke({MessageName} $message): void
{
// Logique de traitement
// $message->getUserId()
// $message->getEmail()
}
}
Regles de generation :
final avec attribut #[AsMessageHandler]__invoke() avec le message en parametrevoid par defaut (sauf si query avec retour)src/Messenger/Middleware/{MessageName}Middleware.php avec Write<?php
declare(strict_types=1);
namespace {namespace}\Messenger\Middleware;
use Symfony\Component\Messenger\Envelope;
use Symfony\Component\Messenger\Middleware\MiddlewareInterface;
use Symfony\Component\Messenger\Middleware\StackInterface;
final class {MessageName}Middleware implements MiddlewareInterface
{
public function handle(Envelope $envelope, StackInterface $stack): Envelope
{
// Logique avant traitement
$envelope = $stack->next()->handle($envelope, $stack);
// Logique apres traitement
return $envelope;
}
}
Affiche :
Message {MessageName} genere avec succes
Fichiers crees :
- src/Message/{MessageName}.php
- src/MessageHandler/{MessageName}Handler.php
Dispatch du message :
$this->messageBus->dispatch(new {MessageName}($userId, $email));
Configuration du routing (config/packages/messenger.yaml) :
framework:
messenger:
routing:
'{namespace}\Message\{MessageName}': async
Prochaines etapes :
- Implementer la logique dans le handler
- Configurer le routing dans messenger.yaml
- Lancer le worker : php bin/console messenger:consume async
#[AsMessageHandler] attribut (Symfony 6.2+)__invoke() invocableMiddlewareInterface$stack->next()->handle()#[AsMessageHandler] a l'interface MessageHandlerInterfacemessenger.yaml, pas dans le codemessenger:consume pour lancer le workermessenger.yaml sous failure_transport