【问题标题】:Laravel Spark - Defining a free planLaravel Spark - 定义免费计划
【发布时间】:2021-11-18 23:20:05
【问题描述】:

我正在使用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 页面。但是,如果用户只是想继续使用免费计划,则他/她不需要创建有效订阅。

如何使用 Laravel Spark Next 提供“免费计划”?

【问题讨论】:

    标签: php laravel php-8


    【解决方案1】:

    虽然我的解决方案没有使用“按座位”定价模型,但您可以了解如何通过这种方式创建“免费”计划。

    我原来是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,以更好地了解它的工作原理,但这就是要点。

    我希望这可以帮助你,奥利弗。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-08
      • 1970-01-01
      • 2015-09-09
      • 1970-01-01
      • 1970-01-01
      • 2018-03-20
      • 1970-01-01
      • 2017-01-08
      相关资源
      最近更新 更多