laravel 统一处理接口返回错误

本文介绍了一种通过自定义异常处理机制来优化复杂业务逻辑的方法,避免了传统的if...else语句导致的代码臃肿问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一般来说,我们的接口会设计如下

    public function login(Request $request)
    {
        if(某个条件真){
        	return response()->json([
	            'code' => '0',
        	]);
        }else{
        	return response()->json([
	            'code' => '1',
	            'msg'=>'xx错误'
        	]);
        }
    }

如果有很多个if…else时:

    // 如果很多个if...else判断的情况下
       public function login(Request $request)
       {
           if(某个条件真){
           	return response()->json([
   	            'code' => '0',
           	]);
           }else if(xxx){
           	return response()->json([
   	            'code' => '1',
   	            'msg'=>'xx错误'
           	]);
           }
           // 某个函数执行结果
           else if(!foo()){
           	return response()->json([
   	            'code' => '1',
   	            'msg'=>'yy错误'
           	]);
           }
       ...
   }
   
   function foo(){
   	if(xx){
   		return true;
   	}else{
   		return false;
   	}
   }

这种return的情况在controller中还好,如果controller还依赖其他函数的返回结果,那么代码就很臃肿,如果那个步骤忘了return,那么客户端就收不到任何相应!

那么我们如何优化这种情况呢?

答案是使用异常
我们仅仅需要定义一个exception

class DefaultException extends Exception
{
   public function __construct($message, $code)
   {
       parent::__construct($message, $code);
   }
   
   // 这个方法必须,重定义异常捕获时的response
   public function render(Request $request)
   {
       return response()->json([
           'code' => '1',
           'message' => $this->message
       ]);;
   }
}

那么在代码的任何地方

 throw new DefaultException("xx错误", "400");

改造后的接口如下:

 // 如果很多个if...else判断的情况下
    public function login(Request $request)
    {
        if(某个条件真){
        	return response()->json([
	            'code' => '0',
        	]);
        }else if(xxx){
			throw new DefaultException("xx错误", "400");
        }
    ...
}

	function foo(){
		if(!xx){
 		throw new DefaultException("xx错误", "400");
		}
	}

清爽~舒服

ok,如此一来,我们接口逻辑或某个函数不通的时候,就不依赖return了,而是直接throw,爽!
而且DefaultException可以改造为任何其他类型的exception,比如用户模块(UserException),扩展性极强!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大炮走火

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值