Preskoči na vsebino

Sprožilci dejanj

Queuety::on_action() vam omogoča, da običajno dejanje WordPress spremenite v trajen zagon poteka dela.

To omogoča preprosto povezavo:

WordPress action -> mapped payload -> durable workflow

To je uporabno, kadar zanimiv dogodek že obstaja v WordPress, odziv, ki zahteva veliko virov ali traja dolgo, pa naj se izvede asinhrono.

Primer: pregled vsebine ob shranjevanju objave

PHP
use Queuety\Queuety;

Queuety::on_action(
    'save_post',
    workflow: 'content_review',
    map: static fn ( int $post_id, object $post, bool $update ): array => [
        'post_id' => $post_id,
        'post_type' => $post->post_type,
        'update' => $update,
    ],
    when: static fn ( int $post_id, object $post ): bool => 'post' === $post->post_type,
    idempotency_key: static fn ( int $post_id ): string => "save_post:{$post_id}",
);

V tem primeru:

  • save_post je še vedno izvirni dogodek WordPress
  • map spremeni surove argumente hooka v preprosto stanje poteka dela
  • when prezre neželene dogodke, preden so dodani v čakalno vrsto
  • idempotency_key prepreči, da bi ponavljajoči se klici hooka sprožili podvojene izvedbe

Kaj se izvaja sinhrono

Sama povratna funkcija dejanja se še vedno izvaja znotraj trenutne zahteve WordPress.

To pomeni, da so ti deli sinhroni:

  • when
  • map
  • idempotency_key

Asinhrono se po sprožitvi izvajajo samo koraki poteka dela.

Pravila za koristni tovor

Preslikani koristni tovori naj vsebujejo preproste nize, števila in null.

Surovih objektov WordPress, kot je WP_Post, ne posredujte neposredno v stanje poteka dela. Najprej jih normalizirajte znotraj map():

PHP
Queuety::on_action(
    'save_post',
    workflow: 'content_review',
    map: static fn ( int $post_id, object $post, bool $update ): array => [
        'post_id' => $post_id,
        'post_type' => $post->post_type,
        'post_status' => $post->post_status,
        'update' => $update,
    ],
);

Zavrnjeni so ključi, ki se začnejo z _, saj so ta imena rezervirana za interno stanje poteka dela.

Sprejeti argumenti

WordPress pri registraciji povratne funkcije dejanja zahteva število accepted_args.

Queuety ga privzeto določi na podlagi vaših povratnih funkcij map, when in idempotency_key, zato v običajnem primeru dodatna nastavitev ni potrebna:

PHP
Queuety::on_action(
    'save_post',
    workflow: 'content_review',
    map: static fn ( int $post_id, object $post, bool $update ): array => [
        'post_id' => $post_id,
        'update' => $update,
    ],
);

Če ga želite ročno nastaviti, izrecno posredujte accepted_args:

PHP
Queuety::on_action(
    'comment_post',
    workflow: 'comment_review',
    accepted_args: 2,
);

Sprotni gradniki potekov dela

Sprožite lahko registrirano ime poteka dela ali sprotni WorkflowBuilder.

Sprotni gradniki so uporabni, kadar je potek dela za določeni hook opredeljen v isti zagonski datoteki:

PHP
$review = Queuety::workflow( 'comment_review' )
    ->then( ModerateCommentStep::class )
    ->then( NotifyModeratorStep::class );

Queuety::on_action(
    'comment_post',
    workflow: $review,
    map: static fn ( int $comment_id ): array => [
        'comment_id' => $comment_id,
    ],
    idempotency_key: static fn ( int $comment_id ): string => "comment:{$comment_id}",
);

Kdaj je to primerna rešitev

Sprožilce dejanj uporabite, kadar:

  • WordPress že oddaja dogodek, ki vas zanima
  • naj se odziv ohrani tudi po časovni omejitvi zahteve ali ponovnem zagonu delavca
  • se lahko nadaljnje delo razveji, počaka ali zahteva odobritev
  • je za podvojene klice hooka potrebna trajna idempotentnost

Namesto tega neposredno pokličite Queuety::dispatch() ali Queuety::workflow(), kadar delo ni povezano z mejo dogodka WordPress.

Ni namenjeno filtrom

Queuety::on_action() je namenjen izključno dejanjem.

Filtri so sinhrone pretvorbe med obdelavo zahteve. Običajno naj ostanejo sinhroni, saj WordPress pričakuje, da bo filtrirana vrednost vrnjena takoj.