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 职业分类
| 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_transportAudite 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