Pereiti prie turinio

PHP atributai

Queuety palaiko PHP 8 atributus, skirtus apdorojimo funkcijoms registruoti be konfigūracijos. Pažymėkite apdorojimo funkcijų klases #[QueuetyHandler] ir užregistruokite jas visas iš karto naudodami automatinį aptikimą.

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

Atributo parametrai:

Parametras Tipas Numatytoji reikšmė Aprašymas
name string (privaloma) Apdorojimo funkcijos pavadinimas, naudojamas iškvietimui
queue string 'default' Numatytoji šios apdorojimo funkcijos eilė
max_attempts int 3 Didžiausias vykdymų skaičius, kol užduotis bus paslėpta
needs_wordpress bool false Išsaugoma atribute; Queuety šiuo metu jos neskaito

Automatinis aptikimas

Nuskaitykite katalogą, ieškodami atributais pažymėtų apdorojimo funkcijų klasių, ir užregistruokite jas visas:

PHP
use Queuety\Queuety;

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

Tai nuskaito kiekvieną .php failą kataloge ir jo pakatalogiuose, pagal vardų srities priešdėlį ir failo kelią nustato kiekvienos klasės pavadinimą, įkelia ją per automatinio įkėlimo mechanizmą ir užregistruoja klases, turinčias atributą #[QueuetyHandler] bei įgyvendinančias Handler, Step arba Contracts\Job.

Automatinis aptikimas per 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

Pavyzdinė išvestis:

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

Geriausia praktika

Registruokite apdorojimo funkcijas inicijuodami savo įskiepį:

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

Taip nebereikia rankiniu būdu kviesti Queuety::register() kiekvienai apdorojimo funkcijai. Į katalogą įtraukus klasę su atributu, naujos apdorojimo funkcijos aptinkamos automatiškai.

Derinimas su rankine registracija

Automatiškai aptiktos ir rankiniu būdu užregistruotos apdorojimo funkcijos gali būti tame pačiame registre. Tame pačiame projekte galite taikyti abu būdus:

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