İçeriğe geç

PHP Öznitelikleri

Queuety, sıfır yapılandırmayla işleyici kaydı için PHP 8 özniteliğini destekler. İşleyici sınıflarınıza #[QueuetyHandler] açıklamasını ekleyin ve hepsini tek seferde kaydetmek için otomatik keşfi kullanın.

#[QueuetyHandler] özniteliği

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

Öznitelik parametreleri:

Parametre Tür Varsayılan Açıklama
name string (gerekli) Dağıtımda kullanılan işleyici adı
queue string 'default' Bu işleyici için varsayılan kuyruk
max_attempts int 3 Görev gömülmeden önceki en yüksek çalıştırma sayısı
needs_wordpress bool false Öznitelikte saklanır; Queuety şu anda bunu okumaz

Otomatik keşif

Açıklama eklenmiş işleyici sınıflarını bulmak ve hepsini kaydetmek için bir dizini tarayın:

PHP
use Queuety\Queuety;

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

Bu işlem, dizindeki ve alt dizinlerindeki tüm .php dosyalarını tarar; ad alanı önekinden ve dosya yolundan her sınıfın adını çıkarır, otomatik yükleyiciniz aracılığıyla yükler ve #[QueuetyHandler] özniteliğini taşıyan ve Handler, Step veya Contracts\Job uygulayan sınıfları kaydeder.

CLI aracılığıyla otomatik keşif

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

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

Örnek çıktı:

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

En iyi uygulama

İşleyicileri eklentinizin başlatma aşamasında kaydedin:

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

Bu, her işleyici için elle yapılan Queuety::register() çağrılarını ortadan kaldırır. Dizine özniteliği taşıyan yeni bir sınıf eklediğinizde işleyiciler otomatik olarak bulunur.

Elle kayıtla birleştirme

Otomatik keşfedilen ve elle kaydedilen işleyiciler aynı kayıt defterinde birlikte bulunabilir. Aynı projede her iki yaklaşımı da kullanabilirsiniz:

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