<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                封裝之前確定下規范 **請求處理成功:** * json里面的code = 0 * response里面的http_code = 200。 **請求處理失敗:** 客戶端錯誤: * code =?1~1000 (其中500~1000可設計為有名錯誤,類似于計算機端口的有名端口,1~499可讓程序開發人員任意使用) * http_code = 200 服務端錯誤: * code = 1001~2000 (其中1001~1500可設計為本服務錯誤,1501~2000可設計為本服務依賴的服務錯誤。 ) * http_code = 500。 以上思路的優點,我認為: 1、當服務端api異常,需要服務端開發者介入的時候,http_code = 500,這樣可以讓監控程序,很方便的監控到。 2、將錯誤分為,客戶端開發者處理的錯誤(不記錄日志,返回詳細錯誤信息),和服務端開發者處理的錯誤(記錄日志,不返回錯誤詳情),這樣便于客戶端開發者及時排除問題。 **返回數據格式如下** 成功 ``` {"code":0,"message":"消息內容","data":{}} ``` 失敗 ``` {"code":10000,"message":"消息內容","data":{}} ``` 當然你也可以參考# [阿里和Google的JAVA開發規約](https://www.cnblogs.com/HappyBeibei/p/11105182.html) tp默認的全局異常在根目錄`\thinkphp\library\think\Exception.php` ``` namespace think; class Exception extends \Exception{ ... } ``` **1定義全局異常** 框架支持異常頁面由開發者自定義類進行處理,需要在config.php配置`exception_handle`,默認為空 (`'exception_handle'=>'',`)調用的是 think\exception\Handle 即`\thinkphp\library\think\exception\Handle.php`下的Handle類 捕獲的錯誤將在handle的render方法輸出 >[danger] 記得在應用下開啟`app_bug=true` 模塊下的無效哦 接下來我們將重寫Handle類,首先修改`exception_handle` ~~~ 'exception_handle'=>'app\lib\exception\ExceptionHandle' ~~~ 然后新建application/lib/exception/ExceptionHandler.php 負責渲染錯誤信息 ~~~ namespace app\lib\exception; use think\Exception; use think\exception\Handle; use think\Request; /** * 注意: * tp默認調用的異常處理類是think\exception\Handle; * 調用異常處理類可以在config.php配置默認為空 'exception_handle'=>'',調用的是 think\exception\Handle * 默認調用application/lib/exception/下的這個類則需要修改配置為:'exception_handle'=>'app\lib\exception\ExceptionHandle' * */ class ExceptionHandler extends Handle{ private $code;//Http Code private $msg; private $errorCode; public function render(Exception $e){ if ($e instanceof BaseException) {//!!!!如果BaseException 與這個Exceptionhandler不是同一個命名空間一定要引入空間啊 $this->code=$e->code; $this->msg=$e->message; $this->errorCode=$e->errorCode; }else{ $this->code=500; $this->msg="服務器內部錯誤"; $this->errorCode=999;//自定義的哦         //這里手動記錄日志 } $request=Request::instance(); $result=array( 'msg'=>$this->msg, 'error_code'=>$this->errorCode, 'request_url'=>$request->url() ); return json($result); } } ~~~ **為應用定義一個公共異常類** 然后新建application/lib/exception/BaseException.php baseException定義code msg errorCode這三個屬性的默認值 ~~~ namespace app\lib\exception; use think\Exception; class BaseException extends Exception{ //將錯誤代碼設為http狀態碼,業務錯誤代碼設為errorCode public $code=400; //錯誤的具體信息 public $message="參數錯誤"; //自定義的業務錯誤碼 public $errorCode="10000"; } //基類屬性參考 protected string $message ;//異常消息內容 protected int $code ;//異常代碼 protected string $file ;//拋出異常的文件名 protected int $line ;//拋出異常在該文件中的行號 ~~~ **每個模塊每個錯誤類型定義一個異常類繼承BaseException** application/lib/exception/BannerMissException.php ~~~ namespace app\lib\exception; //use app\lib\exception\Handle; class BannerMissException extends BaseException{ //http狀態碼 public $code=404; //錯誤的具體信息 public $message="請求的Banner不存在"; //自定義的錯誤碼 public $errorCode=40000; } ~~~ ## **用法:** 在model中查詢數據并在banner控制器調用 當model中沒有數據時調用BannermissException 這時exceptionHandler的render將捕獲這個錯誤 **模塊** ~~~ namespace app\api\Model; use think\Model; // use think\Excption; class Banner extends Model{ public static function getBannerById($id){ //TODO:根據bannerid號獲取banner信息 return null; //return "this is banner info"; } } ~~~ **控制器** ~~~ namespace app\api\controller\v1; use think\Controller; use app\api\Model\Banner as BannerModel;//這里的Banner和Model的Banner重名 use app\lib\exception\BannerMissException; class Banner extends controller{ public function index(){ //http://localhost/thinkphp5/public/index.php/api/v1.Banner/index } public function getBanner($id){ $banner=BannerModel::getBannerById($id); if (!$banner) { throw new BannerMissException(); } } } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看