Zum Inhalt springen

PHP Attribute

Queuety unterstützt PHP 8 Attribute für die Handler-Registrierung ohne Konfiguration. Kennzeichne deine Handler-Klassen mit #[QueuetyHandler] und registriere sie alle auf einmal per automatischer Erkennung.

Das 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 [];
    }
}

Die Attributparameter:

Parameter Typ Standardwert Beschreibung
name string (erforderlich) Handlername für die Dispatch-Zuordnung
queue string 'default' Standardwarteschlange für diesen Handler
max_attempts int 3 Maximale Anzahl von Ausführungen, bevor der Job archiviert wird
needs_wordpress bool false Im Attribut gespeichert; Queuety liest diesen Wert derzeit nicht aus

Automatische Erkennung

Ein Verzeichnis nach gekennzeichneten Handler-Klassen durchsuchen und alle registrieren:

PHP
use Queuety\Queuety;

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

Durchsucht jede .php-Datei im Verzeichnis und seinen Unterverzeichnissen, leitet jeden Klassennamen aus dem Namespace-Präfix und dem Dateipfad ab, lädt die Klasse über deinen Autoloader und registriert Klassen, die das Attribut #[QueuetyHandler] tragen und Handler, Step oder Contracts\Job implementieren.

Automatische Erkennung über 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

Beispielausgabe:

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

Bewährte Vorgehensweise

Registriere Handler bei der Initialisierung deines Plugins:

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

Damit entfallen manuelle Aufrufe von Queuety::register() für jeden Handler. Neue Handler werden automatisch erkannt, sobald du eine Klasse mit dem Attribut zum Verzeichnis hinzufügst.

Kombination mit manueller Registrierung

Automatisch erkannte und manuell registrierte Handler können nebeneinander in derselben Registry verwendet werden. Du kannst beide Ansätze im selben Projekt nutzen:

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 );