Treci la conținut

PHP Atribute

Queuety acceptă atribute PHP 8 pentru înregistrarea handler-elor fără configurare. Adnotați clasele handler-elor cu #[QueuetyHandler] și folosiți descoperirea automată pentru a le înregistra pe toate deodată.

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

Parametrii atributului:

Parametru Tip Valoare implicită Descriere
name string (obligatoriu) Numele handler-ului folosit la trimitere
queue string 'default' Coada implicită pentru acest handler
max_attempts int 3 Numărul maxim de execuții înainte ca activitatea să fie pusă deoparte
needs_wordpress bool false Stocat în atribut; Queuety nu îl citește momentan

Descoperire automată

Scanați un director pentru clase de handler adnotate și înregistrați-le pe toate:

PHP
use Queuety\Queuety;

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

Se scanează fiecare fișier .php din director și subdirectoarele acestuia, se deduce numele fiecărei clase din prefixul spațiului de nume și calea fișierului, se încarcă prin autoloader și se înregistrează clasele care au atributul #[QueuetyHandler] și implementează Handler, Step sau Contracts\Job.

Descoperire automată prin 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

Exemplu de rezultat:

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

Bună practică

Înregistrați handler-ele la inițializarea pluginului:

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

Astfel, nu mai este nevoie de apeluri Queuety::register() manuale pentru fiecare handler. Handler-ele noi sunt detectate automat când adăugați în director o clasă cu atributul respectiv.

Combinarea cu înregistrarea manuală

Handler-ele descoperite automat și cele înregistrate manual coexistă în același registru. Puteți folosi ambele abordări în același proiect:

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