Ga naar de inhoud

PHP Attributen

Queuety ondersteunt 8 attributen van PHP voor handlerregistratie zonder configuratie. Voorzie je handlerklassen van het attribuut #[QueuetyHandler] en registreer ze allemaal tegelijk met automatische ontdekking.

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

De attribuutparameters:

Parameter Type Standaardwaarde Beschrijving
name string (verplicht) Handlernaam voor dispatch
queue string 'default' Standaardwachtrij voor deze handler
max_attempts int 3 Maximumaantal runs voordat de taak in de wachtrij voor mislukte taken belandt
needs_wordpress bool false Opgeslagen in het attribuut; Queuety leest dit momenteel niet uit

Automatische ontdekking

Scan een map op handlerklassen met annotaties en registreer ze allemaal:

PHP
use Queuety\Queuety;

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

Dit scant elk .php-bestand in de map en de submappen, leidt de naam van elke klasse af uit het naamruimtevoorvoegsel en het bestandspad, laadt de klasse via je autoloader en registreert klassen met het attribuut #[QueuetyHandler] die Handler, Step of Contracts\Job implementeren.

Automatische ontdekking via 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

Voorbeelduitvoer:

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

Aanbevolen werkwijze

Registreer handlers tijdens de initialisatie van je plugin:

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

Hierdoor zijn handmatige aanroepen van Queuety::register() voor elke handler niet meer nodig. Nieuwe handlers worden automatisch gevonden wanneer je een klasse met het attribuut aan de map toevoegt.

Combineren met handmatige registratie

Automatisch ontdekte en handmatig geregistreerde handlers kunnen naast elkaar in hetzelfde register staan. Je kunt beide werkwijzen in hetzelfde project gebruiken:

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