如何在 Laravel 中实现产品试用功能(Free Trial)
Laravel 是创建「软件即服务」解决方案的良好框架-用户按月付费(功能)。通常,它应该包含某种免费试用机制。在本文中,我主要介绍一下我如何在 Laravel 5.8中做到这一点。
我们在这里创建什么
- 我们使用默认的 Laravel 应用, 运行
artisan make:auth
生成默认的认证系统; - 将添加一个新的时间戳字段 users.trial_until ,默认情况下将在注册后14天内填写该字段;
- 可以在 config/app.php 设置天数 –因为你永远不知道需求会咋么改动;
- 实现剩余免费试用天数的标题,并带有升级到高级计划的链接(我们不在本文中介绍升级或付款,仅免费试用);
- 检查免费试用是否结束(如果是)–显示无法关闭的引导模式,用户如果想继续,那么续费吧;
好了,可以开始下一步的工作了。
步骤1. Users 表新增 trial_until 字段
运行:
php artisan make:migration add_trial_until_field_to_users_table
在迁移文件中:
Schema::table('users', function (Blueprint $table) {
$table->timestamp('trial_until')->nullable();
});
然后(这里并没有提到要运行迁移文件 php artisan migrate
)在 app/User.php 文件中把该字段加入到 $fillable:
class User extends Authenticatable
{
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password', 'trial_until'
];
最后,在创建用户时我们需要填充它
/**
* 有效注册后创建一个新的用户实例
*
* @param array $data
* @return \App\User
*/
protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
'trial_until' => now()->addDays(config('app.free_trial_days')),
]);
}
可以看到,我们使用的是可配置的值 config(‘app.free_trial_days’)
,因此我们可以把配置的值添加到 config/app.php 文件:
'aliases' => [
'App' => Illuminate\Support\Facades\App::class,
'Arr' => Illuminate\Support\Arr::class,
// ...
'View' => Illuminate\Support\Facades\View::class,
],
'free_trial_days' => 14,
];
步骤2.标头文字和升级链接
为了显示剩余的免费试用天数,我们需要在每一页上进行计算。将其作为 app / User.php 模型的属性会很方便,因此我们将使用访问器.
public function getFreeTrialDaysLeftAttribute()
{
// 付款后将实施的Future字段
if ($this->plan_until) {
return 0;
}
return now()->diffInDays($this->trial_until, false);
}
现在我们可以从代码中的任意位置调用 auth()->user()->free_trial_days_left 来访问此值。
另外如果想把时间字段 $this->trial_until
转换成 Carbon
,只要在 app/User.php 模型中将此字段加入到 $dates 数组中即可。
protected $dates = [
'trial_until'
];
然后我们找到位于 resources/views/layouts/app.blade.php 的头部,添加另一个带有信息和链接的 – 请参阅 @else 指令后面的块:
@guest
<li class="nav-item">
<a class="nav-link" href="{{ route('login') }}">{{ __('Login') }}</a>
</li>
@if (Route::has('register'))
<li class="nav-item">
<a class="nav-link" href="{{ route('register') }}">{{ __('Register') }}</a>
</li>
@endif
@else
@if (auth()->user()->free_trial_days_left > 0)
<li class="nav-item">
<a class="nav-link" href="/upgrade">{{ auth()->user()->free_trial_days_left }} Days of Free Trial left. Upgrade now.</a>
</li>
@endif
<li class="nav-item dropdown">
<a id="navbarDropdown" class="nav-link dropdown-toggle" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" v-pre>
{{ Auth::user()->name }} <span class="caret"></span>
</a>
目前,我们不会实现该/升级链接,这超出本文讨论范围。但是我们确实显示了天数。
步骤3.免费试用结束后的页面
我们将在 resources/views/layouts/app.blade.php 结尾中添加一个 @if-@else
@if (auth()->check() && auth()->user()->free_trial_days_left < 0)
<!-- Modal -->
<div class="modal NO-fade"
tabindex="-1" role="dialog" style="display: block">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h3 class="modal-title">Upgrade Plan</h3>
</div>
<div class="modal-body">
<div class="alert alert-danger">
Your Free Trial is over. Please choose plan to continue.
</div>
<div class="row">
<div class="col-md-6 offset-md-3 text-center">
<h4>Unlimited Plan</h4>
<b>$199.99 per year</b>
<hr />
- <b>Unlimited</b> AdminPanels<br />
- All CRUDs and Modules<br />
- Unlimited Functions<br />
- <b>Priority</b> Live-chat Support
<hr />
<a href="/upgrade" class="btn btn-lg btn-primary">Pay $199.99</a>
</div>
</div>
</div>
</div>
</div>
</div>
@endif
</body>
</html>
查看结果:
我已经从 QuickAdminPanel.com 类似弹出窗口中获取了文本示例,你可以自定义,并从数据库或配置中获取文本。
这就是免费试用。如果本文受到关注,我可能会继续进行有关SaaS系列的付款,计划,发票等。
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
推荐文章: