You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于用户属性实现Laravel Spark Stripe v5.0套餐条件显示

Laravel Spark v5.0 基于用户性别实现套餐条件展示方案

1. 为套餐添加性别关联元数据

在app/Providers/SparkServiceProvider.php的boot方法中,给每个套餐绑定对应性别标识:

public function boot()
{
    parent::boot();

    // 男性套餐配置
    Spark::plan('男性套餐', 'stripe-male-plan-id')
        ->price(10)
        ->features([
            '专属男性服务',
            '每月10次权益'
        ])
        ->metadata(['gender' => 'male']);

    // 女性套餐配置
    Spark::plan('女性套餐', 'stripe-female-plan-id')
        ->price(5)
        ->features([
            '专属女性服务',
            '每月15次权益'
        ])
        ->metadata(['gender' => 'female']);
}

2. 过滤套餐数据(两种可选实现方式)

方式一:后端视图Composer自动过滤

在app/Providers/AppServiceProvider.php的boot方法中添加视图Composer,提前过滤出当前用户匹配的套餐:

use Illuminate\Support\Facades\View;
use Laravel\Spark\Spark;

public function boot()
{
    View::composer('spark::settings.billing.subscribe', function ($view) {
        $currentUser = auth()->user();
        
        // 筛选与用户性别匹配的套餐
        $filteredPlans = Spark::plans()->filter(function ($plan) use ($currentUser) {
            return $plan->metadata['gender'] === $currentUser->gender;
        });

        $view->with('plans', $filteredPlans);
    });
}

方式二:直接修改视图文件做判断

先发布Spark视图到本地:

php artisan vendor:publish --tag=spark-views

打开resources/views/vendor/spark/settings/billing/subscribe.blade.php,在遍历套餐的代码块中添加性别校验:

@foreach ($plans as $plan)
    {{-- 仅展示与当前用户性别匹配的套餐 --}}
    @if($plan->metadata['gender'] === auth()->user()->gender)
        <div class="col-md-4">
            <div class="card mb-4">
                <div class="card-header">{{ $plan->name }}</div>
                <div class="card-body">
                    <h4 class="card-title">${{ $plan->price }} / 月</h4>
                    <ul class="list-unstyled mt-3 mb-4">
                        @foreach ($plan->features as $feature)
                            <li class="mb-2">
                                <i class="fa fa-check text-success"></i> {{ $feature }}
                            </li>
                        @endforeach
                    </ul>
                    <button class="btn btn-lg btn-primary btn-block" onclick="subscribe('{{ $plan->id }}')">
                        立即订阅
                    </button>
                </div>
            </div>
        </div>
    @endif
@endforeach

3. 前置校验

确保users表存在gender字段(建议存储male/female字符串值),且用户注册或资料编辑时已正确设置该字段。

内容的提问来源于stack exchange,提问作者Nihilarian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 05:40:10