Rumah >rangka kerja php >Laravel >pengendalian pengecualian permintaan laravel
Laravel ialah rangka kerja PHP popular yang menyediakan sistem yang berkuasa dan fleksibel untuk membina aplikasi web. Walau bagaimanapun, semasa proses pembangunan, tidak dapat dielakkan untuk menghadapi pengecualian permintaan. Dalam artikel ini, kita akan membincangkan cara mengendalikan pengecualian permintaan Laravel.
Permintaan pengecualian dalam Laravel boleh dibahagikan kepada dua jenis: pengecualian program dan pengecualian HTTP.
Pengecualian program ialah pengecualian yang berlaku apabila kod berjalan, seperti ralat maut yang dilemparkan oleh PHP, pengecualian yang tidak ditangkap, dsb.
Pengecualian HTTP merujuk kepada pengecualian yang berlaku dalam permintaan HTTP, seperti 404 Not Found, 500 Internal Server Error, dsb.
Jenis pengecualian yang berbeza memerlukan kaedah pengendalian yang berbeza.
Pengecualian program mungkin muncul dalam pengawal Laravel Jika tidak dikendalikan, halaman akan muncul untuk memaparkan mesej ralat. Ini bukan yang diharapkan oleh pengguna, jadi pengecualian program perlu dikendalikan.
Laravel menyediakan kami dengan dua kaedah untuk mengendalikan pengecualian program. Yang pertama ialah menggunakan pengendali pengecualian, dan yang kedua adalah menggunakan pengendalian pengecualian global.
Pengendali Pengecualian 2.1
Pengendali pengecualian Laravel ialah kelas yang mengendalikan pengecualian yang dilemparkan oleh aplikasi. Jika kami mahu pengawal mengembalikan respons dalam format JSON apabila pengecualian dilemparkan, kami boleh mencipta pengendali pengecualian tersuai. Berikut ialah contoh:
<?php namespace AppExceptions; use Exception; use IlluminateFoundationExceptionsHandler as ExceptionHandler; class Handler extends ExceptionHandler { /** * A list of the exception types that are not reported. * * @var array */ protected $dontReport = [ // ]; /** * Report or log an exception. * * @param Exception $exception * @return void */ public function report(Exception $exception) { parent::report($exception); } /** * Render an exception into an HTTP response. * * @param IlluminateHttpRequest $request * @param Exception $exception * @return IlluminateHttpResponse */ public function render($request, Exception $exception) { if ($exception instanceof IlluminateDatabaseEloquentModelNotFoundException) { return response()->json([ 'error' => 'Resource not found' ], 404); } return parent::render($request, $exception); } }
Dalam contoh ini, kami mewarisi kelas pengendali pengecualian Laravel dan mengatasi kaedah render
. Dalam kaedah render
, kami menyemak sama ada jenis pengecualian ialah IlluminateDatabaseEloquentModelNotFoundException
. Jika ya, kami mengembalikan respons berformat JSON.
Kami juga boleh mengendalikan pengecualian program lain dalam kaedah ini. Kelebihan pendekatan ini ialah kita boleh menulis pengendali tersuai untuk setiap jenis pengecualian. Dengan cara ini kita boleh meramalkan jenis tindak balas yang akan kita perolehi.
2.2 Pengendalian Pengecualian Global
Menggunakan pengendalian pengecualian global, kami boleh menangkap semua pengecualian dalam aplikasi dan bukannya menulis pengendali berasingan untuk setiap pengecualian. Berikut ialah contoh:
<?php namespace AppExceptions; use Exception; use IlluminateFoundationExceptionsHandler as ExceptionHandler; class Handler extends ExceptionHandler { /** * A list of the exception types that are not reported. * * @var array */ protected $dontReport = [ // ]; /** * Report or log an exception. * * @param Exception $exception * @return void */ public function report(Exception $exception) { parent::report($exception); } /** * Render an exception into an HTTP response. * * @param IlluminateHttpRequest $request * @param Exception $exception * @return IlluminateHttpResponse */ public function render($request, Exception $exception) { if ($exception instanceof SymfonyComponentHttpKernelExceptionHttpException) { $code = $exception->getStatusCode(); return response()->json([ 'error' => 'HTTP Exception', 'status' => $code ], $code); } return parent::render($request, $exception); } /** * Render the given HttpException. * * @param SymfonyComponentHttpKernelExceptionHttpException $e * @return IlluminateHttpResponse */ protected function renderHttpException(HttpException $e) { $status = $e->getStatusCode(); if (view()->exists("errors.{$status}")) { return response()->view("errors.{$status}", ['exception' => $e], $status, $e->getHeaders()); } else { return $this->convertExceptionToResponse($e); } } }
Dalam contoh ini, kami mengatasi kaedah render
untuk menyemak sama ada jenis pengecualian ialah SymfonyComponentHttpKernelExceptionHttpException
. Jika ya, kami membuat respons berformat JSON termasuk mesej ralat dan kod status HTTP.
Jika kami perlu memaparkan halaman HTML, kami juga boleh mengatasi kaedah renderHttpException
untuk memaparkan halaman pengecualian tersuai.
Laravel menyediakan cara mudah untuk mengendalikan pengecualian HTTP. Dengan menyesuaikan kaedah app/Exceptions/Handler.php
dalam render
, kami boleh mengembalikan kod status HTTP yang ditentukan. Berikut ialah contoh:
public function render($request, Exception $exception) { if ($this->isHttpException($exception)) { return $this->renderHttpException($exception); } else { return parent::render($request, $exception); } } protected function renderHttpException(HttpException $exception) { return response()->view('errors.' . $exception->getStatusCode(), [], $exception->getStatusCode()); }
Dalam contoh di atas, kami menyemak sama ada pengecualian ialah pengecualian HTTP. Jika ya, kami menggunakan kaedah getStatusCode
untuk mendapatkan kod status HTTP dan menggunakannya sebagai nama paparan. Dalam contoh ini, kami hanya mengembalikan pandangan yang sepadan dengan kod status.
Dalam artikel ini, kami memperkenalkan cara mengendalikan program dan pengecualian HTTP dalam Laravel. Kami mempelajari cara menggunakan pengendali pengecualian dan pengendalian pengecualian global untuk mengendalikan pengecualian program dan cara menyesuaikan kaedah render
untuk mengendalikan pengecualian HTTP. Adalah sangat penting untuk pembangun Laravel mengendalikan pengecualian dengan betul. Dengan menggunakan teknologi ini, kami dapat mengawal kelakuan aplikasi kami dengan lebih tepat, meningkatkan kebolehpercayaan dan kestabilannya.
Atas ialah kandungan terperinci pengendalian pengecualian permintaan laravel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!