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]
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:
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
# 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:
+-----------------------------------+----------+------------+
| 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:
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:
// 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 );