在 Lumen 中,處理異常和錯誤主要涉及到以下幾個方面:
異常處理器(Exception Handler):Lumen 默認提供了一個 App\Exceptions\Handler 類,用于處理所有應用程序中拋出的異常。你可以在這個類中自定義異常處理邏輯。
自定義異常:你可以創建自定義的異常類,繼承自 PHP 的 Exception 類或其他已有的異常類。在自定義異常類中,你可以設置異常的消息、代碼等屬性。
拋出異常:在應用程序的任何地方,你可以使用 throw
關鍵字拋出一個異常。Lumen 會捕獲這個異常,并將其傳遞給異常處理器進行處理。
異常處理:在異常處理器中,你可以根據不同的異常類型,編寫相應的處理邏輯。例如,你可以為特定的異常類型返回特定的 HTTP 狀態碼和響應內容。
下面是一個簡單的示例,展示了如何在 Lumen 中處理自定義異常:
// app/Exceptions/CustomException.php
namespace App\Exceptions;
use Exception;
class CustomException extends Exception
{
// ...
}
throw
關鍵字拋出異常:// app/Http/Controllers/ExampleController.php
namespace App\Http\Controllers;
use App\Exceptions\CustomException;
class ExampleController extends Controller
{
public function exampleAction()
{
// ...
if ($someCondition) {
throw new CustomException('This is a custom exception message.', 400);
}
// ...
}
}
// app/Exceptions/Handler.php
namespace App\Exceptions;
use Exception;
use Illuminate\Validation\ValidationException;
use Laravel\Lumen\Exceptions\Handler as ExceptionHandler;
use Symfony\Component\HttpKernel\Exception\HttpException;
class Handler extends ExceptionHandler
{
// ...
public function render($request, Exception $exception)
{
if ($exception instanceof CustomException) {
return response()->json([
'error' => [
'message' => $exception->getMessage(),
'code' => $exception->getCode(),
],
], $exception->getCode());
}
return parent::render($request, $exception);
}
}
在上面的示例中,當 ExampleController 中的 $someCondition
為真時,將拋出一個 CustomException 異常。然后,在 Handler 類的 render
方法中,我們檢查異常是否為 CustomException 類型,如果是,則返回一個包含異常信息的 JSON 響應。