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

Laravel中根据用户状态动态显示咨询主题的技术问询

Laravel 根据用户状态动态显示咨询主题

你的思路是可行的,但可以通过提取公共主题来简化代码,减少重复维护成本。以下是优化后的实现方式:

优化方案1:提取公共主题,按需追加

public function inquirySubject()
{
    // 所有用户可见的基础咨询主题
    $subjects = [
        'Inquiry',
        'Follow Up',
        'Technical Problem',
        'Other Application Concern',
        'Proof of Payment'
    ];

    $user = auth()->user();
    // 验证用户状态,符合条件则追加专属主题
    if ($user->status === 'approved' || $user->status === 'active') {
        $subjects[] = 'Payment Concern';
    }

    return response()->json($subjects);
}

优化方案2:定义全量主题,按需移除

如果更倾向于先定义所有主题再剔除不符合条件的选项,可以用数组过滤的方式:

public function inquirySubject()
{
    // 定义全部咨询主题
    $subjects = [
        'Inquiry',
        'Follow Up',
        'Technical Problem',
        'Other Application Concern',
        'Payment Concern',
        'Proof of Payment'
    ];

    $user = auth()->user();
    // 用户状态不符合时,移除指定主题
    if (!in_array($user->status, ['approved', 'active'])) {
        $subjects = array_values(array_filter($subjects, function($item) {
            return $item !== 'Payment Concern';
        }));
    }

    return response()->json($subjects);
}

额外优化:处理未登录场景

如果接口可能被未登录用户访问,建议增加登录校验,避免auth()->user()为空导致报错:

public function inquirySubject()
{
    // 未登录用户返回受限主题集合
    if (!auth()->check()) {
        return response()->json([
            'Inquiry',
            'Follow Up',
            'Technical Problem',
            'Other Application Concern',
            'Proof of Payment'
        ]);
    }

    $user = auth()->user();
    $subjects = [
        'Inquiry',
        'Follow Up',
        'Technical Problem',
        'Other Application Concern',
        'Proof of Payment'
    ];

    if ($user->status === 'approved' || $user->status === 'active') {
        $subjects[] = 'Payment Concern';
    }

    return response()->json($subjects);
}

这些优化的核心是减少重复代码,后续如果需要修改主题内容,只需要在一处调整即可,提升代码的可维护性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 00:01:14