Laravel Spark - 定义免费计划
Laravel Spark - Defining a free plan
我正在使用 Laravel Spark Next 并且我正在尝试创建一个免费计划。我的应用程序向用户“按席位”收费(项目数)
但是,我的申请将始终包含一个免费项目。这意味着我需要提供两种方案:一种免费,一种付费
在我的 SparkServiceProvider 中,我添加了这个:
Spark::billable(User::class)->chargePerSeat('lejemål', function (User $billable) {
$projects = return $billable->projects()->count();
//The first project is always free.
return match ($projects) {
0, 1 => 0,
default => $leases,
};
});
据我了解,“chargePerSeat”方法只是计算向用户收费的价格。所以在这种情况下,如果用户有 0 或 1 个项目并选择订阅,则要支付的价格为零(理应如此)。
但是,我正在尝试了解免费计划的运作方式。在经典的 Spark 中,我们可以在配置中定义一个“免费计划”。
当用户创建项目时,我根据 documentation:
添加了 subscribed
中间件
Route::get('projects/create', CreateProject::class)
->name('projects.create')
->middleware('subscribed');
看起来这个中间件只是检查是否有活动订阅。如果没有,它会将用户重定向到 /billing
页面。但是,如果用户只是想继续使用免费计划,he/she 不需要创建有效订阅。
如何使用 Laravel Spark Next 提供“免费计划”?
虽然我的解决方案没有使用“按席位”定价模式,但您可以通过这种方式了解如何创建“免费”计划。
我本来是wrote it on my blog,但我会把重要的部分写在这里。
您需要在 config/spark.php
文件中创建一个“免费”计划。
// ...
'plans' => [
[
'name' => 'Free',
'short_description' => 'This is the free plan',
// Random _(not used by other plans)_ ID
'monthly_id' => 1000,
'features' => [
'1 Project',
],
'options' => [
'projects' => 1,
],
// IMPORTANT
'archived' => true,
],
// Other plans...
]
// ...
然后在你的“用户”模型上实现一个方法。
此方法将获取当前用户的套餐,如果用户没有活动套餐,则获取“免费”套餐。
有效地回到“免费”计划。
// ...
public function getPlan()
{
$plan = $this->sparkPlan();
if ($plan !== null) {
return $plan;
}
// Fallback to "Free" plan
$plan = Spark::plans('user')->firstWhere('name', '=', 'Free');
return $plan;
}
// ...
然后您就可以通过您的应用程序使用它了。
$user = User::find(1);
$plan = $user->getPlan();
$plan->name; // "Free"
$plan->options['projects']; // 1
我建议您阅读我的 blog post,以便更好地理解其工作原理,但这是要点。
奥利弗,希望这对你有帮助。
我正在使用 Laravel Spark Next 并且我正在尝试创建一个免费计划。我的应用程序向用户“按席位”收费(项目数)
但是,我的申请将始终包含一个免费项目。这意味着我需要提供两种方案:一种免费,一种付费
在我的 SparkServiceProvider 中,我添加了这个:
Spark::billable(User::class)->chargePerSeat('lejemål', function (User $billable) {
$projects = return $billable->projects()->count();
//The first project is always free.
return match ($projects) {
0, 1 => 0,
default => $leases,
};
});
据我了解,“chargePerSeat”方法只是计算向用户收费的价格。所以在这种情况下,如果用户有 0 或 1 个项目并选择订阅,则要支付的价格为零(理应如此)。
但是,我正在尝试了解免费计划的运作方式。在经典的 Spark 中,我们可以在配置中定义一个“免费计划”。
当用户创建项目时,我根据 documentation:
添加了subscribed
中间件
Route::get('projects/create', CreateProject::class)
->name('projects.create')
->middleware('subscribed');
看起来这个中间件只是检查是否有活动订阅。如果没有,它会将用户重定向到 /billing
页面。但是,如果用户只是想继续使用免费计划,he/she 不需要创建有效订阅。
如何使用 Laravel Spark Next 提供“免费计划”?
虽然我的解决方案没有使用“按席位”定价模式,但您可以通过这种方式了解如何创建“免费”计划。
我本来是wrote it on my blog,但我会把重要的部分写在这里。
您需要在 config/spark.php
文件中创建一个“免费”计划。
// ...
'plans' => [
[
'name' => 'Free',
'short_description' => 'This is the free plan',
// Random _(not used by other plans)_ ID
'monthly_id' => 1000,
'features' => [
'1 Project',
],
'options' => [
'projects' => 1,
],
// IMPORTANT
'archived' => true,
],
// Other plans...
]
// ...
然后在你的“用户”模型上实现一个方法。
此方法将获取当前用户的套餐,如果用户没有活动套餐,则获取“免费”套餐。
有效地回到“免费”计划。
// ...
public function getPlan()
{
$plan = $this->sparkPlan();
if ($plan !== null) {
return $plan;
}
// Fallback to "Free" plan
$plan = Spark::plans('user')->firstWhere('name', '=', 'Free');
return $plan;
}
// ...
然后您就可以通过您的应用程序使用它了。
$user = User::find(1);
$plan = $user->getPlan();
$plan->name; // "Free"
$plan->options['projects']; // 1
我建议您阅读我的 blog post,以便更好地理解其工作原理,但这是要点。
奥利弗,希望这对你有帮助。