1. Go to this page and download the library: Download jasperfernandez/laraflow 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/ */
use App\Models\User;
use JasperFernandez\Laraflow\Data\TransitionPayload;
use JasperFernandez\Laraflow\Services\WorkflowEngine;
$actor = User::findOrFail(1);
$result = app(WorkflowEngine::class)->apply(
instance: $instance->fresh(),
actionCode: 'submit_application',
actor: $actor,
payload: new TransitionPayload(
remarks: 'Submitted for eligibility review',
metadata: ['channel' => 'portal'],
),
);
class User extends Authenticatable
{
public function hasRole(string $role): bool
{
return $this->roles()->where('name', $role)->exists();
}
}
use App\Models\Application;
use App\Models\User;
use JasperFernandez\Laraflow\Data\TransitionPayload;
use JasperFernandez\Laraflow\Services\WorkflowEngine;
$engine = app(WorkflowEngine::class);
$application = Application::create([
'name' => 'Jane Doe',
]);
$instance = $engine->start(
templateCode: 'MEMBERSHIP-APPLICATION',
subject: $application,
context: ['started_by' => auth()->id()],
);
$member = User::findOrFail(1);
$firstResult = $engine->apply(
instance: $instance->fresh(),
actionCode: 'submit_application',
actor: $member,
payload: new TransitionPayload(
remarks: 'Application submitted',
),
);
$reviewer = User::findOrFail(2);
$finalResult = $engine->apply(
instance: $firstResult->instance->fresh(),
actionCode: 'approve_application',
actor: $reviewer,
payload: new TransitionPayload(
remarks: 'Application approved',
),
);
if ($finalResult->closed) {
// The workflow has finished.
}
use Illuminate\Database\Eloquent\Model;
use JasperFernandez\Laraflow\Traits\HasWorkflows;
class Application extends Model
{
use HasWorkflows;
}
// Usage
$application = Application::find(1);
$currentWorkflow = $application->currentWorkflow;
$allWorkflows = $application->workflowInstances;
use JasperFernandez\Laraflow\Events\WorkflowTransitioned;
public function boot()
{
Event::listen(WorkflowTransitioned::class, function ($event) {
// $event->result is a TransitionResult DTO
});
}