Pāriet uz saturu

Nosacījumu atzarošana

Darbplūsmas var pāriet uz nosauktu darbību atkarībā no iepriekšējās darbības izvades. To panāk, darbības atgrieztajā vērtībā iekļaujot īpašu atslēgu _next_step.

Ja vēlaties atgriezties pie agrākas darbības, balstoties uz darbplūsmas stāvokli, skatiet Atkārtošana. Tādējādi atgriešanās saite darbplūsmas definīcijā ir skaidri norādīta, nevis paslēpta darbības klasē.

Nosauktas darbības

Piešķiriet darbībām nosaukumu, izmantojot otro argumentu funkcijā ->then():

PHP
use Queuety\Queuety;

Queuety::workflow( 'process_order' )
    ->then( ValidateOrderHandler::class, 'validate' )
    ->then( ChargePaymentHandler::class, 'charge' )
    ->then( FulfillOrderHandler::class, 'fulfill' )
    ->then( SendConfirmationHandler::class, 'confirm' )
    ->then( HandleFailureHandler::class, 'failure' )
    ->dispatch( [ 'order_id' => 123 ] );

Ja nosaukums nav skaidri norādīts, darbības nosauc pēc to indeksa ('0', '1', '2' utt.).

Atslēga _next_step

Darbība var atgriezt _next_step, lai pārietu uz nosauktu darbību, izlaižot visas darbības starp tām. Pēc pārlēciena mērķa darbības turpina izpildīties secīgi: ja pārlēciena nav, darbplūsma vienkārši turpina ar nākamo darbību sarakstā. Tāpēc iepriekšējā piemērā pēc sekmīgas confirm darbības tiek turpināts ar failure, ja vien tā neatgriež _next_step, kas to izlaiž, vai HandleFailureHandler vispirms nepārbauda, vai ir pieejama atslēga error:

PHP
use Queuety\Step;

class ValidateOrderHandler implements Step {
    public function handle( array $state ): array {
        $order = wc_get_order( $state['order_id'] );

        if ( ! $order || $order->get_status() === 'cancelled' ) {
            return [
                'error'  => 'Order is invalid or cancelled',
                '_next_step'  => 'failure',
            ];
        }

        return [
            'order_total' => $order->get_total(),
            'customer_id' => $order->get_customer_id(),
        ];
    }

    public function config(): array {
        return [];
    }
}

Kad ValidateOrderHandler atgriež _next_step => 'failure', darbplūsma izlaiž charge, fulfill un confirm un pāriet tieši uz darbību failure. Darbplūsmas dzinis patērē atslēgu _next_step, un tā netiek saglabāta stāvoklī.

Atzarošanas modeļi

Izlaist, ja nosacījums izpildīts

PHP
class CheckInventoryHandler implements Step {
    public function handle( array $state ): array {
        $in_stock = check_inventory( $state['sku'] );

        if ( ! $in_stock ) {
            return [
                'reason' => 'Out of stock',
                '_next_step'  => 'notify_backorder',
            ];
        }

        return [ 'inventory_reserved' => true ];
    }

    public function config(): array {
        return [];
    }
}

Pabeigt priekšlaikus

Pārejiet uz pēdējo darbību, lai izlaistu nevajadzīgo apstrādi:

PHP
class CheckCacheHandler implements Step {
    public function handle( array $state ): array {
        $cached = get_transient( "report_{$state['user_id']}" );

        if ( $cached ) {
            return [
                'report_url' => $cached,
                '_next_step'      => 'done',
            ];
        }

        return [ 'cache_miss' => true ];
    }

    public function config(): array {
        return [];
    }
}

Pilns piemērs

PHP
Queuety::workflow( 'content_pipeline' )
    ->then( CheckCacheHandler::class, 'check_cache' )
    ->then( FetchDataHandler::class, 'fetch' )
    ->then( CallLLMHandler::class, 'generate' )
    ->then( SaveResultHandler::class, 'save' )
    ->then( ReturnCachedHandler::class, 'done' )
    ->dispatch( [ 'user_id' => 42 ] );

Ja kešatmiņas pārbaudē tiek atrasts ieraksts, darbplūsma pāriet no check_cache tieši uz done, izlaižot fetch, generate un save. Ja ieraksta nav, darbības tiek izpildītas secīgi, un pēc save tiek turpināts ar done, tāpēc ReturnCachedHandler jāspēj apstrādāt abus izpildes ceļus.