Skip to main content

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ền nonce 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ức Inertia::handleExceptionsUsing() trong service provider của ứng dụng.
Vì exception như 404 xảy ra bên ngoài Inertia middleware (request không bao giờ tới route), error response mặc định không truy cập được shared data hoặc root view. Gọi withSharedData() rõ ràng sẽ resolve Inertia middleware và đưa shared props vào error page. Instance ExceptionResponse cung cấp exception, requestresponse 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ấp
  • withSharedData() - Bao gồm shared data từ Inertia middleware
  • usingMiddleware($class) - Chỉ định Inertia middleware dùng để resolve shared data và root view
  • rootView($view) - Đặt custom root view cho error response
  • statusCode() - Lấy HTTP status code của response ban đầu
Inertia middleware được tự động resolve từ matched route hoặc middleware group của kernel, nên 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.

Tài liệu chính thức

Bài dịch này được đối chiếu từ tài liệu Inertia.js v3 chính thức. Nếu có khác biệt do phiên bản hoặc cập nhật mới, hãy ưu tiên tài liệu chính thức làm nguồn tham chiếu.