Laravel中如何通过Trait的return终止控制器执行?
问题解决方法
当前代码的核心问题是:控制器调用Trait的custo方法时,没有处理该方法返回的响应。即使custo方法已经生成了错误提示的跳转响应,控制器仍会继续执行后续代码,最终返回成功重定向。
修复步骤:
修改控制器的
update方法
调用custo方法后接收其返回值,若返回值不为空(即校验不通过的响应),则直接返回该响应,终止后续代码执行。修改后的控制器代码:
public function update(UpdateObra $request, $id) { $response = $this->custo($request); // 校验不通过时,直接返回Trait生成的错误响应 if ($response) { return $response; } // 校验通过后,继续执行后续业务逻辑 .... return redirect()->route('app.obras.index')->with( 'success','Obra Atualizada com Sucesso' ); }Trait代码可保持原样(可选优化)
原Trait的逻辑已经正确:当$custo != 100.00时返回跳转响应,校验通过时默认返回null,刚好适配控制器的判断逻辑。如果想让逻辑更清晰,可在校验通过时显式返回null:trait ObraTrait { public function custo(Request $request) { $custo = array_sum($request->custo); if ($custo != 100.00) { return back()->withInput()->with( 'danger','Custo equal to 100.00%' ); } // 明确校验通过时的返回值 return null; } }
原理说明
当$custo不等于100时,custo方法会生成带错误提示的跳转响应,控制器接收到后直接返回,后续业务代码和成功重定向不会执行;只有校验通过时,custo方法返回null,控制器才会继续执行后续逻辑。
内容的提问来源于stack exchange,提问作者Jorge Edo. Hernandez
相关产品推荐
相关产品推荐

