Ngoại lệ PHP tương tự như ngoại lệ trong các ngôn ngữ lập trình khác. Các ngoại lệ được đưa ra khi xảy ra lỗi hoặc sự kiện không xác định. Tất cả các ngoại lệ PHP đều mở rộng lớp Ngoại lệ cơ sở
Laravel cung cấp ứng dụng/Ngoại lệ/Trình xử lý. php kiểm tra tất cả các ngoại lệ được đưa vào ứng dụng. Về cơ bản, mọi ngoại lệ được đưa vào ứng dụng đều có thể được định cấu hình trong tệp này và có thể tạo phản hồi thích hợp
Trong hướng dẫn này, chúng ta sẽ xem cách tạo phản hồi tùy chỉnh cho trang 404. Chúng tôi đang sử dụng Laravel 5. 6. Theo mặc định, Laravel trả lại trang Whoops. Chúng tôi sẽ xem cách trả lại một trang tùy chỉnh tùy thuộc vào ngoại lệ. Điều này sẽ giúp bạn trả về một trang tùy chỉnh cho mọi Ngoại lệ HTTP mà bạn muốn
Khi ai đó truy cập vào một tuyến đường không có mặt, trang web của bạn sẽ hiển thị lỗi. Nó cũng ảnh hưởng đến SEO của bạn
Vì vậy, hãy xem cách chúng ta có thể quản lý trang 404, các ngoại lệ HTTP khác và Ngoại lệ tùy chỉnh trong Laravel
Mục lục
Thiết lập dự án Laravel
Hãy tạo một dự án laravel mới. Chạy lệnh sau để tạo một dự án mới trong thư mục có tên là lỗi
composer create-project --prefer-dist laravel/laravel errors
Xử lý ngoại lệ
Tất cả các thay đổi liên quan đến xử lý ngoại lệ sẽ được thực hiện trong app/Exceptions/Handler. php. Chúng tôi sẽ trả lại chế độ xem khi có lỗi
Trang 404 tùy chỉnh
Hãy tạo một trang 404 tùy chỉnh trong Laravel. Trong ứng dụng/Ngoại lệ/Trình xử lý. php, hãy sửa đổi phương thức kết xuất
/** * Render an exception into an HTTP response. * * @param \Illuminate\Http\Request $request * @param \Exception $exception * @return \Illuminate\Http\Response */ public function render[$request, Exception $exception] { if [$this->isHttpException[$exception]] { if [$exception->getStatusCode[] == 404] { return response[]->view['errors.' . '404', [], 404]; } } return parent::render[$request, $exception]; }
Trong phương thức kết xuất, chúng tôi kiểm tra xem ngoại lệ có phải là ngoại lệ HTTP không. Điều này rất quan trọng vì chúng ta đang gọi phương thức getStatusCode[] chỉ khả dụng trên các ngoại lệ HTTP. Nếu mã trạng thái là 404, chúng tôi sẽ trả về lỗi xem. 404 với cả mã trạng thái. Bạn có thể thay đổi tên của chế độ xem nếu bạn muốn
Chúng ta phải tạo chế độ xem cho trang 404. Vì vậy, hãy tạo một tệp xem lỗi/404 mới. lưỡi. php
Page not found - 404 The page your looking for is not available
Nếu bạn muốn tạo một trang tùy chỉnh cho bất kỳ ngoại lệ HTTP nào khác, chỉ cần thêm câu lệnh if mới và thay đổi 404 bằng mã trạng thái mới. Đây là phương pháp kết xuất để xử lý các trang tùy chỉnh mã trạng thái 404 và 500
public function render[$request, Exception $exception] { if [$this->isHttpException[$exception]] { if [$exception->getStatusCode[] == 404] { return response[]->view['errors.' . '404', [], 404]; } if [$exception->getStatusCode[] == 500] { return response[]->view['errors.' . '500', [], 500]; } } return parent::render[$request, $exception]; }
Đây là phản hồi 404 từ ứng dụng của chúng tôi
Trang ngoại lệ HTTP tùy chỉnh
Chúng tôi cũng có thể tự động hóa quá trình này. Sẽ thật tuyệt nếu chúng ta chỉ phải tạo một tệp xem mới cho ngoại lệ. Nhu cầu thêm mã vào ứng dụng/Ngoại lệ/Trình xử lý. php cho mọi ngoại lệ HTTP sẽ không còn cần thiết nữa. Trong ứng dụng/Ngoại lệ/Trình xử lý. php sửa đổi phương thức kết xuất
public function render[$request, Exception $exception] { if [$this->isHttpException[$exception]] { if [view[]->exists['errors.' . $exception->getStatusCode[]]] { return response[]->view['errors.' . $exception->getStatusCode[], [], $exception->getStatusCode[]]; } } return parent::render[$request, $exception]; }
Bây giờ, bạn chỉ cần tạo chế độ xem với mã trạng thái của ngoại lệ. phương thức kết xuất sẽ kiểm tra xem chế độ xem có tồn tại với mã trạng thái của ngoại lệ không. Nếu có chế độ xem, nó sẽ chỉ trả về phản hồi HTTP với chế độ xem đó và mã trạng thái
Ví dụ: chúng tôi có thể tạo lỗi/404. lưỡi. php cho các trang lỗi 404, lỗi/500. lưỡi. php cho 500 trang lỗi, v.v.
Xử lý ngoại lệ tùy chỉnh
Trước tiên hãy tạo một ngoại lệ tùy chỉnh. Chạy đoạn mã sau để tạo một ngoại lệ có tên là TestingHttpException
php artisan make:exception TestingHttpException
Trong ứng dụng/Ngoại lệ/Trình xử lý. php, hãy sửa đổi phương thức kết xuất
public function render[$request, Exception $exception] { if [$exception instanceof TestingHttpException] { return response[]->view['errors.testing']; } return parent::render[$request, $exception]; }
Nếu ngoại lệ là một phiên bản của TestingHttpException, nó sẽ trả về lỗi. chế độ xem thử nghiệm
Bạn cũng có thể sử dụng phương pháp hủy bỏ với mã 404 và nó sẽ cung cấp phản hồi HTTP với trang 404 tùy chỉnh