lumen_rule_others.md
3.78 KB
LUMEN+API 其它说明
1. Exception
- 在应用中,所有的错误或者异常情况,都是通过抛出异常来进行应答,而不是通过respondError.所以需要改造Exception, 以当异常抛出时,返回需要的接口值。
/* 自定义实现ExceptionHandler */
class ECExceptionHandler extends ExceptionHandler
{
/**
* Render an exception into an HTTP response.
*
* @param \Illuminate\Http\Request $request
* @param \Exception $e
* @return \Illuminate\Http\Response
*/
public function render($request, Exception $e)
{
$response['code'] = $e->getCode();
$response['message'] = $e->getMessage();
/**
* 记录异常
*/
$this->logToDatabaseAndLogger($request,$e);
$httpStsCode = IlluminateResponse::HTTP_NOT_ACCEPTABLE;
if($e instanceof ECException) {
$response['message'] = $e->getECErrorMessage();
if($e->getHttpStatus()) {
$httpStsCode = $e->getHttpStatus();
}
}
if ($this->isDebugMode()) {
$response['debug'] = [
'exception' => get_class($e),
'trace' => $e->getTraceAsString()
];
}
// 错误时的应答
return response()->json(
$response,
$httpStsCode
);
}
}
- 异常可以自定义具体的HTTP返回码,当碰到什么样的错误时,HTTP码为什么值。默认的错误HTTP返回码是406(Not Accept).
/**
* 错误代码的行为定义
* Class GlobalErrCodeLang
* @package App\Library\VariDefines\ErrorCodes
*/
class GlobalErrCodeLang
{
/* 定义错误码的中文说明 */
private static $errLang = array(
/* 函数或接口错误 (6xxxx) */
GlobalErrCode::ERR_PARAM_QUERY_ERROR => '参数错误',
GlobalErrCode::ERR_ATTRIBUTE_SET_ERROR => '数据设定错误',
GlobalErrCode::ERR_PARAM_NOT_SET => '函数调用参数没有设定',
/* 用户错误 */
GlobalErrCode::ERR_EMP_NOT_FIND => '找不到此用户',
GlobalErrCode::ERR_EMP_HAS_NO_GUIDER => '站点中没有配置此导购',
GlobalErrCode::ERR_EMP_HAS_NO_COMPANY => '此雇员没有设定相应的集团和公司',
/* 系统错误 (9xxxx) */
GlobalErrCode::ERR_SYSTEM_ERROR => '系统未知错误',
);
/* 定义错误码的HTTP返回Code */
private static $errHttpStatus = array(
/* 认证请求错误:401 */
GlobalErrCode::ERR_AUTH_BAD_REQUEST => IlluminateResponse::HTTP_UNAUTHORIZED,
GlobalErrCode::ERR_AUTH_USER_NOT_EXIST => IlluminateResponse::HTTP_UNAUTHORIZED,
GlobalErrCode::ERR_AUTH_INTERNAL_SERVER_ERROR => IlluminateResponse::HTTP_INTERNAL_SERVER_ERROR,
GlobalErrCode::ERR_AUTH_PARAM_ERROR => IlluminateResponse::HTTP_UNAUTHORIZED,
GlobalErrCode::ERR_AUTH_GET_ACCESS_TOKEN_ERROR => IlluminateResponse::HTTP_UNAUTHORIZED,
GlobalErrCode::ERR_AUTH_TOKEN_ABSENT => IlluminateResponse::HTTP_UNAUTHORIZED,
GlobalErrCode::ERR_AUTH_TOKEN_INVALID => IlluminateResponse::HTTP_UNAUTHORIZED,
GlobalErrCode::ERR_AUTH_TOKEN_EXPIRED => IlluminateResponse::HTTP_UNAUTHORIZED,
GlobalErrCode::ERR_AUTH_FORBIDDEN => IlluminateResponse::HTTP_UNAUTHORIZED,
);
}
?
2. IDE
通过PHPStorm工具,实现良好的编码规范后,可以避免很多的语法错误,包括变量未定义,语法的错误、重复定义等。
所以在写代码时,要确保代码在IDE中极少存在右侧的警告信息。(有些警告不可避免,但是这样的警告很少)
对于Model层,因为where, find,update这些方法IDE不认识,所以这些报告警告可以忽略,大部分警告需要我们去确认。