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
相关产品推荐
相关产品推荐

