symfonyevent
Genere un Event Symfony + EventSubscriber ou EventListener
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Genere un Event Symfony + EventSubscriber ou EventListener
用 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:event |
| description | Genere un Event Symfony + EventSubscriber ou EventListener |
| model | sonnet |
| allowed-tools | ["AskUserQuestion","Bash","Read","Write","Edit","Grep","Glob"] |
| version | 1.0.0 |
| license | MIT |
Genere un Event personnalise et son EventSubscriber ou EventListener selon les bonnes pratiques Symfony.
src/Event/{EventName}.phpsrc/EventSubscriber/{HandlerName}Subscriber.php ou src/EventListener/{HandlerName}Listener.phpIMPORTANT : Execute ce workflow etape par etape :
Question: "Quel est le nom de l'evenement ? (ex: OrderPlaced, UserRegistered, InvoiceGenerated)"
Header: "Event"
Question: "Quelles donnees porte l'evenement ? Format: order:Order,user:User,amount:float (laisser vide si aucune)"
Header: "Donnees"
Question: "Quel type de handler pour cet evenement ?"
Header: "Handler"
Options:
- "EventSubscriber (Recommande)" : "Classe qui s'abonne a un ou plusieurs events via getSubscribedEvents()"
- "EventListener" : "Classe avec attribut #[AsEventListener] sur la methode de traitement"
Question: "L'evenement peut-il etre stoppe par un listener ?"
Header: "Stoppable"
Options:
- "Non (Recommande)" : "Tous les listeners seront toujours executes"
- "Oui" : "Un listener peut stopper la propagation (StoppableEventInterface)"
composer.json avec Readautoload.psr-4App par defautsrc/Event/{EventName}.php avec Write<?php
declare(strict_types=1);
namespace {namespace}\Event;
use Symfony\Contracts\EventDispatcher\Event;
final class {EventName} extends Event
{
public function __construct(
private readonly Order $order,
private readonly User $user,
) {
}
public function getOrder(): Order
{
return $this->order;
}
public function getUser(): User
{
return $this->user;
}
}
Si stoppable :
use Psr\EventDispatcher\StoppableEventInterface;
final class {EventName} extends Event implements StoppableEventInterface
{
private bool $propagationStopped = false;
public function isPropagationStopped(): bool
{
return $this->propagationStopped;
}
public function stopPropagation(): void
{
$this->propagationStopped = true;
}
}
Regles de generation :
final, extends Symfony\Contracts\EventDispatcher\Eventprivate readonly via promoted constructorEventSubscriber :
<?php
declare(strict_types=1);
namespace {namespace}\EventSubscriber;
use {namespace}\Event\{EventName};
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
final class {HandlerName}Subscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents(): array
{
return [
{EventName}::class => 'on{EventName}',
];
}
public function on{EventName}({EventName} $event): void
{
// Logique de traitement
}
}
EventListener :
<?php
declare(strict_types=1);
namespace {namespace}\EventListener;
use {namespace}\Event\{EventName};
use Symfony\Component\EventDispatcher\Attribute\AsEventListener;
final class {HandlerName}Listener
{
#[AsEventListener]
public function on{EventName}({EventName} $event): void
{
// Logique de traitement
}
}
Affiche :
Event {EventName} genere avec succes
Fichiers crees :
- src/Event/{EventName}.php
- src/EventSubscriber/{HandlerName}Subscriber.php (ou Listener)
Dispatch de l'event :
$this->eventDispatcher->dispatch(new {EventName}($order, $user));
Prochaines etapes :
- Implementer la logique dans le handler
- Injecter les services necessaires
- Dispatcher l'event depuis le service/controleur concerne
final, immuable (readonly properties)Symfony\Contracts\EventDispatcher\EventEventSubscriberInterfacegetSubscribedEvents() retourne un tableau statique#[AsEventListener] (Symfony 6.2+)EventSubscriber quand un handler ecoute plusieurs eventsEventListener avec #[AsEventListener] pour un handler simpleSymfony\Contracts\EventDispatcher\Event (pas Symfony\Component\EventDispatcher\Event)OrderPlaced, UserRegistered (pas OrderPlace)