Laravel 同一控制器中如何实现不同函数间的JSON变量传递
你调用$this->getMember($request)得到的是 JsonResponse响应实例,并不是接口返回的JSON数据本身,所以直接访问$member->id无法获取到对应值,会抛出错误。
方案1:抽离公共逻辑(推荐)
如果getMember的核心逻辑需要在控制器内多处复用,建议把业务逻辑单独抽为私有方法,避免重复构建响应对象,代码可维护性更高:
// 新增私有内部方法,专门处理会员ID查询逻辑 private function getMemberId(Request $request) { // 此处可替换为实际获取会员ID的逻辑,比如从请求token中解析 return 2; } // 对外的getMember接口 public function getMember(Request $request) { return response()->json([ 'id' => $this->getMemberId($request) ]); } public function update(Request $request) { $memberId = $this->getMemberId($request); $member = Member::findOrFail($memberId); if($request->has('member_name')) { $member->update([ 'member_name' => $request->input('member_name') ]); } return response()->json(['message' => 'Member has been updated.'], 200); }
方案2:直接从响应实例中取数据
如果不想调整现有getMember的实现,可以直接调用响应实例的getData()方法获取返回的JSON数据:
public function update(Request $request) { // 传入true将返回数据转为数组格式 $memberData = $this->getMember($request)->getData(true); $member = Member::findOrFail($memberData['id']); if($request->has('member_name')) { $member->update([ 'member_name' => $request->input('member_name') ]); } return response()->json(['message' => 'Member has been updated.'], 200); }
优化建议
- 用
findOrFail替代find,找不到对应会员时会自动返回404响应,无需额外判断空值 - 用
$request->has('参数名')判断请求参数是否存在,比直接判空更严谨 - 用
$request->input('参数名')获取请求参数值,兼容性更强
内容的提问来源于stack exchange,提问作者Say Jack
相关产品推荐
相关产品推荐

