Môi trường phát triển
Một lợi thế khi làm việc với server-side framework mạnh là bạn được hưởng sẵn cơ chế xử lý exception. Ví dụ, Laravel đi kèm công cụ báo lỗi trực quan, hiển thị stack trace được định dạng rõ ràng trong môi trường phát triển local. Khó khăn nằm ở chỗ khi bạn thực hiện request XHR (như Inertia vẫn làm) và gặp lỗi phía máy chủ, thông thường bạn phải mở tab Network trong devtools của trình duyệt để lần tìm và chẩn đoán vấn đề. Inertia giải quyết vấn đề này bằng cách hiển thị mọi response không phải Inertia trong một modal. Nhờ vậy, bạn vẫn có trải nghiệm báo lỗi trực quan quen thuộc dù request được thực hiện qua XHR. Với ứng dụng dùng Content Security Policy hạn chế inline style, bạn có thể truyềnnonce vào createInertiaApp() để cho phép inline style do error modal inject. Xem Content Security Policy để biết chi tiết.
Production
Trong production, bạn nên trả proper Inertia error response thay vì dựa vào error reporting bằng modal vốn dùng trong development. Có thể thực hiện bằng phương thứcInertia::handleExceptionsUsing() trong service provider của ứng dụng.
withSharedData() rõ ràng sẽ resolve Inertia middleware và đưa shared props vào error page.
Instance ExceptionResponse cung cấp exception, request và response dưới dạng public readonly property, cùng các method sau:
render($component, $props)- Render Inertia page component với props được cung cấpwithSharedData()- Bao gồm shared data từ Inertia middlewareusingMiddleware($class)- Chỉ định Inertia middleware dùng để resolve shared data và root viewrootView($view)- Đặt custom root view cho error responsestatusCode()- Lấy HTTP status code của response ban đầu
withSharedData() thường hoạt động mà không cần chỉ định middleware class. Trả null từ callback sẽ fallback về cách render exception mặc định của Laravel.
Ví dụ trang lỗi
Bạn cần tạo các error page component được tham chiếu ở trên. Dưới đây là ví dụ có thể dùng làm điểm bắt đầu.Xử lý exception thủ công
Bên dưới,handleExceptionsUsing() đăng ký callback $exceptions->respond() trong file bootstrap/app.php của ứng dụng. Bạn có thể đăng ký callback này thủ công nếu muốn.