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不认识,所以这些报告警告可以忽略,大部分警告需要我们去确认。

3. 环境