calebporzio / onboard
v1.7
2020-09-08 20:11 UTC
Requires
- laravel/framework: 5.0.*|5.1.*|5.2.*|5.3.*|5.4.*|5.5.*|5.6.*|5.7.*|5.8.*|6.*|7.*|8.*
Requires (Dev)
- phpunit/phpunit: ^4.8.35
README
Onboard
一个Laravel包,用于帮助跟踪用户入门步骤。
安装
- 通过composer安装此包
composer require calebporzio/onboard
- 在
config/app.php
中注册服务提供者和外观
'providers' => [ ... Calebporzio\Onboard\OnboardServiceProvider::class, 'aliases' => [ ... Calebporzio\Onboard\OnboardFacade::class,
- 将
Calebporzio\Onboard\GetsOnboarded
特质添加到您的应用程序的用户模型中
class User extends Model { use \Calebporzio\Onboard\GetsOnboarded; ...
示例配置
在您的App\Providers\AppServiceProvider.php
中配置步骤
use App\User; use Calebporzio\Onboard\OnboardFacade; class AppServiceProvider extends ServiceProvider { // ... public function boot() { OnboardFacade::addStep('Complete Profile') ->link('/profile') ->cta('Complete') ->completeIf(function (User $user) { return $user->profile->isComplete(); }); OnboardFacade::addStep('Create Your First Post') ->link('/post/create') ->cta('Create Post') ->completeIf(function (User $user) { return $user->posts->count() > 0; });
使用
现在您可以在任何地方访问这些步骤及其状态。以下是一个示例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
查看以下所有可用功能
$onboarding = Auth::user()->onboarding(); $onboarding->inProgress(); $onboarding->finished(); $onboarding->steps()->each(function($step) { $step->title; $step->cta; $step->link; $step->complete(); $step->incomplete(); });
定义自定义属性并访问它们
// Defining the attributes OnboardFacade::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); } }
小贴士:不要将此中间件添加到更新入门步骤状态的路由,否则您的用户将无法继续前进,因为他们将被重定向回入门步骤。