PHP code example of lenderspender / laravel-state-transition-workflow

1. Go to this page and download the library: Download lenderspender/laravel-state-transition-workflow library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

lenderspender / laravel-state-transition-workflow example snippets


use LenderSpender\StateTransitionWorkflow\HasStateTransitions;

/**
 * @property \App\Enums\TransactionState $status
 */
class Transaction extends Model
{
    use HasStateTransitions;

    protected static function registerStateTransitions(): void
    {
        static::addState('status')
            ->allowTransition(TransactionState::CREATED, TransactionState::SUCCESS, TransactionSuccessfullWorkflow::class)
            ->allowTransition(TransactionState::CREATED, TransactionState::FAILED);
    }
}

use LenderSpender\StateTransitionWorkflow\TransitionState;

enum TransactionState: string implements TransitionState
{
    case CREATED = 'created';
    case SUCCESS = 'success';
    case FAILED = 'failed';

    public function getValue(): string
    {
        return $this->value;
    }
}

use Illuminate\Database\Eloquent\Model;
use LenderSpender\StateTransitionWorkflow\Transition;
use LenderSpender\StateTransitionWorkflow\Workflow;

class TransactionSuccessfullWorkflow extends Workflow
{
    public function __construct(FakeMailer $mailer)
    {
        $this->mailer = $mailer;
    }

    /**
     * @param \App\Models\Transaction $model
     */
    public function execute(Model $transaction, Transition $transition): void
    {
         $this->mailer->mail($transaction->email, 'Payment was sucessfull');
    }
}

$transaction = Transaction::find(1337);
$transaction->transitionStateTo(TransactionState::SUCCESS);

$transaction->status === TransactionState::SUCCESS; // true

// 4.x
protected function registerStateTransitions(): void
{
    $this->addState('status')
        ->allowTransition(State::CREATED, State::SUCCESS);
}

// 5.x
protected static function registerStateTransitions(): void
{
    static::addState('status')
        ->allowTransition(State::CREATED, State::SUCCESS);
}

use Illuminate\Database\Eloquent\Model;
use LenderSpender\StateTransitionWorkflow\HasStateTransitions;

/**
 * @property \App\Enums\TransactionState $status
 */
class Transaction extends Model
{
    use HasStateTransitions;

    protected static function registerStateTransitions(): void
    {
        static::addState('status');
    }
}

class Transaction extends Model
{
    use HasStateTransitions;

    protected static function registerStateTransitions(): void
    {
        static::addState('status')
            ->allowTransition(State::FROM, State::TO);
    }
}

use Illuminate\Database\Eloquent\Model;
use LenderSpender\StateTransitionWorkflow\HasStateTransitions;

class Transaction extends Model
{
    use HasStateTransitions;

    protected static function registerStateTransitions(): void
    {
        static::addState('status')
            ->allowTransition(State::CREATED, [State::FAILED, State::SUCCESS]);
    }
}        

use LenderSpender\StateTransitionWorkflow\HasStateTransitions;

class Transaction extends Model
{
    use HasStateTransitions;

    protected static function registerStateTransitions(): void
    {
        static::addState('status')
            ->allowTransition([State::CREATED, State::UPDATED], [State::FAILED, State::SUCCESS]);
    }
}

$transaction->transitionStateTo(State::SUCCESS);

$transaction->transitionStateTo(State::SUCCESS, 'status');

$transaction->getAvailableStateTransitions();

$transaction->getAvailableStateTransitions('status');

use Illuminate\Database\Eloquent\Model;
use LenderSpender\StateTransitionWorkflow\Transition;
use LenderSpender\StateTransitionWorkflow\Workflow;

class PaidWorkflow extends Workflow
{
    /**
     * @param \App\Model\Transaction $model
     */
    public function execute(Model $transaction, Transition $transition): void
    {
         dump('This is executed before the transition');
    }
}

use Illuminate\Database\Eloquent\Model;
use LenderSpender\StateTransitionWorkflow\Transition;
use LenderSpender\StateTransitionWorkflow\Workflow;

class PaidWorkflow extends Workflow
{
    /**
     * @param \App\Model\Transaction $model
     */
    public function execute(Model $transaction, Transition $transition): void
    {
         dump('This is executed before the transition');
         $transition->execute();
         dump('This is executed after the transition');
    }
}

use Illuminate\Contracts\Queue\ShouldQueue;
use LenderSpender\StateTransitionWorkflow\Workflow;

class PaidWorkflow extends Workflow implements ShouldQueue
{
}

use LenderSpender\StateTransitionWorkflow\Workflow;

class PaidWorkflow extends Workflow
{
    public function isAllowed(Transition $transition): bool
    {
        return false;
    }
}

class Transaction extends Model
{
    use HasStateTransitions;

    protected static function registerStateTransitions(): void
    {
        static::addState('status')
            ->allowTransition(State::CREATED, State::SUCCESS, PaidWorkflow::class);
    }
}