1. Go to this page and download the library: Download dgtlinf/user-onboarding 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/ */
dgtlinf / user-onboarding example snippets
use Dgtlinf\UserOnboarding\Step;
return [
'flows' => [
'default' => [
Step::make('profile')->check(fn($user) => filled($user->name)),
Step::make('verify_email')->check(fn($user) => $user->hasVerifiedEmail()),
],
],
/*
|--------------------------------------------------------------------------
| Onboarding Redirects
|--------------------------------------------------------------------------
|
| Define where users should be redirected when onboarding is incomplete
| for a specific flow. The 'default' route is used if none match.
|
*/
'redirects' => [
'default' => '/onboarding',
],
];
$flow = UserOnboarding::start($user, 'default');
use Dgtlinf\UserOnboarding\Facades\UserOnboarding;
use Dgtlinf\UserOnboarding\Step;
public function onboarding()
{
$user = auth()->user();
$flow = UserOnboarding::for($user)
->addStep(Step::make('fill_profile')->check(fn($u) => filled($u->name)))
->addStep(Step::make('upload_avatar')->check(fn($u) => $u->avatar !== null));
return inertia('Onboarding/Index', [
'steps' => $flow->steps(),
'currentStep' => $flow->current()?->slug,
'progress' => $flow->progress(),
]);
}
use Dgtlinf\UserOnboarding\Facades\UserOnboarding;
use Dgtlinf\UserOnboarding\Step;
public function boot()
{
UserOnboarding::macro('dynamicFlow', function ($user) {
$flow = UserOnboarding::for($user)
->addStep(Step::make('profile')->check(fn($u) => filled($u->name)))
->addStep(Step::make('verify_email')->check(fn($u) => $u->hasVerifiedEmail()));
if ($user->is_team_owner) {
$flow->addStep(Step::make('invite_members')->check(fn($u) => $u->team->members->count() > 1));
}
return $flow;
});
}
UserOnboarding::dynamicFlow($user)->progress();
use Dgtlinf\UserOnboarding\Facades\UserOnboarding;
use Dgtlinf\UserOnboarding\Step;
$user = auth()->user();
$flow = UserOnboarding::for($user)
->addStep(Step::make('profile')->check(fn($u) => $u->profileCompleted()))
->addStep(Step::make('verify_email')->check(fn($u) => $u->hasVerifiedEmail()));
if ($flow->isCompleted()) {
// continue to dashboard
}
$flow->progress(); // e.g. 50.0
namespace App\\Http\\Middleware;
use Closure;
use Dgtlinf\\UserOnboarding\\Facades\\UserOnboarding;
class EnsureOnboardingForApi
{
public function handle($request, Closure $next)
{
$user = $request->user();
// Use a specific flow if needed
$flow = UserOnboarding::start($user, 'default');
if (! $flow->isCompleted()) {
// For APIs, return a JSON response instead of redirect
return response()->json([
'message' => 'User onboarding not completed',
'next_step' => $flow->current()?->slug,
'progress' => $flow->progress(),
], 403);
}
return $next($request);
}
}