[PHP][Slim] slim中自訂Exception

筆者在使用slim的過程中,
發現Slim總是把預設的Exception都搶走了,
導至完全無法使用try catch的功能,
只要使用預設的Exception,就會導到slim預設的error畫面
有幾種方式解決

1.重設slim的設定


$app = new \Slim\App;
$container = $app->getContainer();
$container['errorHandler'] = function ($c) {
  return function ($request, $response, $exception) use ($c) {
    $data = [
      'code' => $exception->getCode(),
      'message' => $exception->getMessage(),
      'file' => $exception->getFile(),
      'line' => $exception->getLine(),
      'trace' => explode("\n", $exception->getTraceAsString()),
    ];

    return $c->get('response')->withStatus(500)
             ->withHeader('Content-Type', 'application/json')
             ->write(json_encode($data));
  };
};

這主要是將slim接到的exception訊息,轉成json。


2.自定Exception


首先建立一個新的class
class queryException extends Exception {
  public function errorMessage() {
    //error message
    $errorMsg = $this->getMessage().' query err.';
    return $errorMsg;
  }

}


接著在需要用到try~catch的地方
try {   

     throw new queryException('query Exception');
            
catch (queryException $e) {
/*
* 在此輸入要處理的程式碼
*/
}

沒有留言:

不再限制您的多媒體創作:使用NDI快速傳輸、處理和編輯高品質的視訊和音訊。

NDI(Network Device Interface)是一種基於IP網絡的視訊和音訊傳輸協議,它可以讓您在同一網絡上的不同設備之間傳輸高品質的視訊和音訊。使用NDI,您可以將視訊和音訊直接傳輸到其他設備上,而不需要使用任何額外的硬體。 以下是使用NDI的步驟: 下載並安裝ND...