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
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_postje še vedno izvirni dogodek WordPressmapspremeni surove argumente hooka v preprosto stanje poteka delawhenprezre neželene dogodke, preden so dodani v čakalno vrstoidempotency_keyprepreč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:
whenmapidempotency_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():
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:
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:
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:
$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.