leanmachine / laravel-onboard
一个帮助跟踪用户入门步骤的Laravel包
2.2.1
2022-07-15 13:28 UTC
Requires
- php: ^8.0|^8.1
- spatie/laravel-package-tools: ^1.9.2
- spatie/once: ^3.1
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.8
- nunomaduro/larastan: ^2.0.1
- orchestra/testbench: ^7.0
- pestphp/pest: ^1.21
- pestphp/pest-plugin-laravel: ^1.1
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- spatie/laravel-ray: ^1.26
README
一个帮助跟踪用户入门步骤的Laravel包
此包允许您为应用程序的用户设置入门流程。
以下是如何设置的示例
use App\User; use Spatie\Onboard\Facades\Onboard; Onboard::addStep('Complete Profile') ->link('/profile') ->cta('Complete') ->completeIf(function (User $user) { return $user->profile->isComplete(); }); Onboard::addStep('Create Your First Post') ->link('/post/create') ->cta('Create Post') ->completeIf(function (User $user) { return $user->posts->count() > 0; });
然后您可以根据需要在模板中渲染此入门流程
@if (auth()->user()->onboarding()->inProgress()) <div> @foreach (auth()->user()->onboarding()->steps as $step) <span> @if($step->complete()) <i class="fa fa-check-square-o fa-fw"></i> <s>{{ $loop->iteration }}. {{ $step->title }}</s> @else <i class="fa fa-square-o fa-fw"></i> {{ $loop->iteration }}. {{ $step->title }} @endif </span> <a href="{{ $step->link }}" {{ $step->complete() ? 'disabled' : '' }}> {{ $step->cta }} </a> @endforeach </div> @endif
支持我们
我们投入了大量资源来创建最佳开源包。您可以通过购买我们的付费产品之一来支持我们。
我们非常感谢您从家乡给我们寄明信片,说明您正在使用我们的哪个包。您可以在我们的联系页面上找到我们的地址。我们在我们的虚拟明信片墙上发布所有收到的明信片。
安装
您可以通过composer安装此包
composer require spatie/laravel-onboard
用法
将Spatie\Onboard\Concerns\GetsOnboarded
特质和Spatie\Onboard\Concerns\Onboardable
接口添加到应用程序中的任何模型或类中,例如User
模型
class User extends Model implements \Spatie\Onboard\Concerns\Onboardable { use \Spatie\Onboard\Concerns\GetsOnboarded; ...
示例配置
在您的App\Providers\AppServiceProvider.php
中配置步骤
use App\User; use Spatie\Onboard\Facades\Onboard; class AppServiceProvider extends ServiceProvider { // ... public function boot() { Onboard::addStep('Complete Profile') ->link('/profile') ->cta('Complete') /** * The completeIf will pass the class that you've added the * interface & trait to. You can use Laravel's dependency * injection here to inject anything else as well. */ ->completeIf(function (User $model) { return $model->profile->isComplete(); }); Onboard::addStep('Create Your First Post') ->link('/post/create') ->cta('Create Post') ->completeIf(function (User $model) { return $model->posts->count() > 0; });
传递给completeIf
回调的变量名称必须是$model
。
用法
现在您可以在任何地方访问这些步骤及其状态。以下是一个示例blade模板
@if (auth()->user()->onboarding()->inProgress()) <div> @foreach (auth()->user()->onboarding()->steps as $step) <span> @if($step->complete()) <i class="fa fa-check-square-o fa-fw"></i> <s>{{ $loop->iteration }}. {{ $step->title }}</s> @else <i class="fa fa-square-o fa-fw"></i> {{ $loop->iteration }}. {{ $step->title }} @endif </span> <a href="{{ $step->link }}" {{ $step->complete() ? 'disabled' : '' }}> {{ $step->cta }} </a> @endforeach </div> @endif
查看以下所有可用功能
/** @var \Spatie\Onboard\OnboardingManager $onboarding **/ $onboarding = Auth::user()->onboarding(); $onboarding->inProgress(); $onboarding->percentageCompleted(); $onboarding->finished(); $onboarding->steps()->each(function($step) { $step->title; $step->cta; $step->link; $step->complete(); $step->incomplete(); });
根据条件排除步骤
Onboard::addStep('Excluded Step') ->excludeIf(function (User $model) { return $model->isAdmin(); });
定义自定义属性并访问它们
// Defining the attributes Onboard::addStep('Step w/ custom attributes') ->attributes([ 'name' => 'Waldo', 'shirt_color' => 'Red & White', ]); // Accessing them $step->name; $step->shirt_color;
示例中间件
如果您想在用户访问您的Web应用程序时确保用户被重定向到下一个未完成的入门步骤,您可以使用以下中间件作为起点
<?php namespace App\Http\Middleware; use Auth; use Closure; class RedirectToUnfinishedOnboardingStep { public function handle($request, Closure $next) { if (auth()->user()->onboarding()->inProgress()) { return redirect()->to( auth()->user()->onboarding()->nextUnfinishedStep()->link ); } return $next($request); } }
提示:不要将此中间件添加到更新入门步骤状态的路由,因为用户将无法继续,因为他们将被重定向回入门步骤。
测试
composer test
更新日志
有关最近更改的更多信息,请参阅更新日志。
贡献
有关详细信息,请参阅贡献。
安全漏洞
有关报告安全漏洞的详细信息,请参阅我们的安全策略。
鸣谢
此包的原始代码来自Caleb Porzio的Onboard,他慷慨地允许我们继续开发。
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。