Rumah > rangka kerja php > Laravel > teks badan

pengendalian pengecualian permintaan laravel

王林
Lepaskan: 2023-05-26 16:35:07
asal
1281 orang telah melayarinya

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.

  1. Klasifikasi pengecualian

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.

  1. Pengendalian pengecualian program

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);
    }
}
Salin selepas log masuk

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);
        }
    }
}
Salin selepas log masuk

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.

  1. Pengendalian pengecualian HTTP

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());
}
Salin selepas log masuk

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.

  1. Kesimpulan

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!