1 app\exceptions 目录下 新建 Apiexception.php
<?php
namespace App\Exceptions;
/***
* API 自定义异常类
*/
use Exception;
class ApiException extends Exception
{
//自定义异常处理
public function SetErrorMessage($errorMsg='', $errorCode = '500'){
$this->errorMsg = $errorMsg;
$this->errorCode = $errorCode;
return $this;
}
}
2 修改 app\exceptions\handler.php 文件
/**
* Render an exception into an HTTP response.
*
* @param \Illuminate\Http\Request $request
* @param \Exception $exception
* @return \Illuminate\Http\Response
*/
public function render($request, Exception $exception)
{
// 如果config配置debug为true ==>debug模式的话让laravel自行处理
$debug_status = config('app.debug'); // .env文件配置
if($debug_status){
return parent::render($request, $exception);
}
return $this->handle($request, $exception);
}
/**
* 异常接管
*
*/
public function handle($request, Exception $exception){
//如果是接口请求,则抛出json
if($request->is('api/*')) {
// 只处理自定义的APIException异常
if($exception instanceof \APP\Exceptions\ApiException ) { //此处写ApiException文件所处路径
$result = [
"status" => 2 , //操作状态: 1 成功 2 失败
"errorCode"=>$exception->errorCode,
"msg" => $exception->errorMsg,
"result" => '',
];
return response()->json($result);
}
//此处可以写多个自定义异常类
if($exception instanceof \APP\Exceptions\otherException ) {
$result = [
"status" => 2 , //操作状态: 1 成功 2 失败
"errorCode"=>$exception->errorCode,
"msg" => $exception->errorMsg,
"result" => '',
];
return response()->json($result);
}
# 继续写其他自定义异常
/***
* code
*
* ***/
}
return parent::render($request, $exception);
}
3 使用
<?php
namespace App\Http\Controllers\Test;
use Illuminate\Routing\Controller;
use App\Exceptions\ApiException;
class IndexController extends Controller
{
public function index(){
throw (new ApiException)->SetErrorMessage("错了",'500');
}
}
这就ok了
整体思路: 使用时候,先实例 自定义 异常。把错误信息传过去, 然后会回到 handler.php 里边显示
注意事项:
1 测试时候。要注册一个路由在访问
2 注意开启debug 在.env 文件里边
|