felixdorn/onboard

跟踪用户入职步骤。

0.7.0 2022-05-18 15:43 UTC

This package is auto-updated.

Last update: 2024-09-18 22:02:04 UTC


README

Tests Formats Version Total Downloads License

安装

需要 PHP 8.1+ 和 Laravel 8.x 或 9.x

您可以通过 composer 安装此包

composer require felixdorn/onboard

ResumeOnboarding 中间件发布到您的 app/Http/Middleware 目录

php artisan onboard:middleware

如果您使用 Inertia,您需要在中间件的跳过方法中,当 $request->inertia() 为真时返回 false。

    public function skip(Request $request): bool
    {
        if ($request->inertia()) {
            return false;
        }
        
        return parent::skip($request);
    }

将其添加到您的 app/Http/Kernel.php

    // ...

    protected $middlewareGroups = [
        'web' => [
            // ...
            \App\Http\Middleware\ResumeOnboarding::class
        ]   
    ]

然后,请确保您的 User 模型使用 HasOnboarding

use Felix\Onboard\Concerns\HasOnboarding;

class User extends Authenticatable {
    use HasOnboarding;
    
    // ...
}

一切准备就绪。

用法

app/Providers/AppServiceProvider.php 中添加您的入职步骤

如果您有很多步骤,您可以考虑创建一个 OnboardServiceProvider(不要忘记在 config/app.php 中注册它)。

use \App\Models\User;
use \Felix\Onboard\Facades\Onboard;

Onboard::add('verify_email')
    ->completedIf(function (User $user) {
        return $user->hasVerifiedEmail(); // or whatever    
    })
    ->skipIf(function () {
        return $user->github_id != null;
    })
    ->route('verification.notice')
    ->allowRoutes(['verification.verify']);

class HomeController extends Controller {
    public function index(\Illuminate\Http\Request $request) {
        return [
            'steps' => $request->user()->onboarding()->toArray()
        ];
    }
}

警告:请小心,闭包在请求期间会被缓存(它们的结果会被缓存)。这在传统应用程序中应该不会成为问题,如果遇到问题,请告知我们。

您可以多次调用 completedIf 和 skipIf,如果所有闭包都返回 true,步骤将被标记为完成或跳过。

您可以将闭包传递给解决路由的懒加载

Onboard::add('create_team')
    ->route(fn () => route('teams.create'));

全局允许的路由

无论入职流程的状态如何,您可能希望用户可以访问某些 URL,例如注销页面。

Onboard::allow(['/api/*']);

Onboard::allowRoutes(['logout', 'settings.billing']);

Step::allowOnboard::allow 使用 honda/url-pattern-matcher,有关如何使用 Onboard 中的模式匹配的更多详细信息,请查看它。

测试

composer test

Laravel 的 OnboardFélix Dorn 根据 MIT 许可证 创建。