Aller au contenu

Attributs PHP

Queuety prend en charge les attributs PHP 8 pour l’enregistrement de gestionnaires sans configuration. Annotez vos classes de gestionnaire avec #[QueuetyHandler] et utilisez la découverte automatique pour les enregistrer toutes en une fois.

L’attribut #[QueuetyHandler]

PHP
use Queuety\Handler;
use Queuety\Attributes\QueuetyHandler;

#[QueuetyHandler( name: 'send_email', queue: 'emails', max_attempts: 5 )]
class SendEmailHandler implements Handler {
    public function handle( array $payload ): void {
        wp_mail( $payload['to'], $payload['subject'], $payload['body'] );
    }

    public function config(): array {
        return [];
    }
}

Paramètres de l’attribut :

Paramètre Type Valeur par défaut Description
name string (obligatoire) Nom du gestionnaire utilisé pour le déclenchement
queue string 'default' File d’attente par défaut pour ce gestionnaire
max_attempts int 3 Nombre maximal d’exécutions avant la mise en réserve du travail
needs_wordpress bool false Stocké dans l’attribut ; Queuety ne le lit pas actuellement

Découverte automatique

Parcourez un répertoire pour trouver les classes de gestionnaire annotées et les enregistrer toutes :

PHP
use Queuety\Queuety;

$count = Queuety::discover_handlers(
    __DIR__ . '/handlers',  // directory to scan
    'MyPlugin\\Handlers'    // PSR-4 namespace prefix
);
// $count = number of handlers registered

Cette opération parcourt chaque fichier .php du répertoire et de ses sous-répertoires, déduit le nom de chaque classe à partir du préfixe de l’espace de noms et du chemin du fichier, le charge via votre chargeur automatique, puis enregistre les classes portant l’attribut #[QueuetyHandler] et implémentant Handler, Step ou Contracts\Job.

Découverte automatique via CLI

Shell
# Preview discovered handlers
wp queuety discover /path/to/handlers MyPlugin\\Handlers

# Discover and register
wp queuety discover /path/to/handlers MyPlugin\\Handlers --register

Exemple de sortie :

Code
+-----------------------------------+----------+------------+
| class                             | type     | name       |
+-----------------------------------+----------+------------+
| MyPlugin\Handlers\SendEmailHandler | handler  | send_email |
| MyPlugin\Handlers\SyncDataHandler  | handler  | sync_data  |
| MyPlugin\Handlers\BuildPromptStep  | step     | (none)     |
+-----------------------------------+----------+------------+

Bonne pratique

Enregistrez les gestionnaires lors de l’initialisation de votre extension :

PHP
add_action( 'plugins_loaded', function () {
    Queuety::discover_handlers(
        __DIR__ . '/src/Handlers',
        'MyPlugin\\Handlers'
    );
} );

Cela remplace les appels manuels à Queuety::register() pour chaque gestionnaire. Les nouveaux gestionnaires sont détectés automatiquement lorsque vous ajoutez au répertoire une classe portant l’attribut.

Combiner avec l’enregistrement manuel

Les gestionnaires découverts automatiquement et ceux enregistrés manuellement coexistent dans le même registre. Vous pouvez utiliser les deux méthodes dans le même projet :

PHP
// Auto-discover the bulk of handlers
Queuety::discover_handlers( __DIR__ . '/handlers', 'MyPlugin\\Handlers' );

// Manually register a handler without the attribute
Queuety::register( 'legacy_handler', LegacyHandler::class );