Lewati ke konten

PHP Atribut

Queuety mendukung 8 atribut PHP untuk pendaftaran handler tanpa konfigurasi. Beri anotasi pada kelas handler Anda dengan #[QueuetyHandler] dan gunakan penemuan otomatis untuk mendaftarkan semuanya sekaligus.

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

Parameter atribut:

Parameter Tipe Default Deskripsi
name string (wajib) Nama handler yang digunakan untuk pemanggilan
queue string 'default' Antrean default untuk handler ini
max_attempts int 3 Jumlah maksimum eksekusi sebelum job dikubur
needs_wordpress bool false Disimpan pada atribut; Queuety belum membacanya saat ini

Penemuan otomatis

Pindai direktori untuk menemukan kelas handler beranotasi dan daftarkan semuanya:

PHP
use Queuety\Queuety;

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

Proses ini memindai setiap file .php di direktori beserta subdirektorinya, menentukan nama setiap kelas dari prefiks namespace dan jalur file, memuatnya melalui autoloader Anda, lalu mendaftarkan kelas yang memiliki atribut #[QueuetyHandler] dan mengimplementasikan Handler, Step, atau Contracts\Job.

Penemuan otomatis melalui 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

Contoh keluaran:

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

Praktik terbaik

Daftarkan handler saat inisialisasi plugin Anda:

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

Ini menggantikan pemanggilan manual Queuety::register() untuk setiap handler. Handler baru akan otomatis terdeteksi saat Anda menambahkan kelas dengan atribut tersebut ke direktori.

Menggabungkan dengan pendaftaran manual

Handler yang ditemukan otomatis dan handler yang didaftarkan secara manual dapat digunakan bersama dalam registry yang sama. Anda dapat menggunakan kedua pendekatan dalam proyek yang sama:

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