Hướng dẫn fix lỗi MethodNotAllowedHttpException trong Laravel

Hiện tượng lỗi

Một (hay nhiều URL) trong project Laravel không chạy, báo lỗi Status 405 (Method Not Allowed)

Laravel Oops hiển thị Error log: Synfony \ Component \ HttpKernel \ Exception\   MethodNotAllowedHttpException.

Laravel Oops: MethodNotAllowedHttpException

Ý nghĩa lỗi

Laravel không chấp nhận request với method (POST, GET, PUT...) ứng với URL của bạn.

Nguyên nhân

  • Bạn đang request sai URL so với URL mà bạn đã khai báo trong Route (web.php hay api.php).
  • Bạn quên (chưa) khai báo URL này trong Route (web.php hay api.php).
  • Bạn chưa tạo lại cache (Trong trường hợp bạn đã tạo cache cho Route trước đó).

Note: Khi bạn đã bật chế độ cache cho Route, Laravel sẽ sử dụng danh sách Route đuọc lưu trong cache thay vì web.php hay api.php. Chính vì thế, mỗi thay đổi trong Route đều cần phải tạo lại cache (thông qua artisan command route:cache).

Cách khắc phục

Bước 1. Kiểm tra URL mà bạn đang request đã khớp hoặc đã tồn tại trong Route chưa?

Trước tiên, bạn cần kiểm tra lại URL mà bạn đang request đã khớp với Route mà bạn đã khai báo trước đó chưa? Thông tin đem ra đối chiếu bao gồm cả URL lẫn method (POST, GET, PUT...).

Trường hợp bạn phát hiện có sự nhầm lẫn (khác biệt giữa URL request và Route), hãy request lại lần nữa với thông tin chính xác hơn.

Lưu ý: Ngoại trừ method ANY, Laravel đều xem các Route có cùng URL nhưng khác Method là khác nhau.

Bước 2. Bổ sung Route (trường hợp bạn chưa khai báo)

Trong trường hợp chưa khai báo Route cho URL mà bạn đang request, hãy bổ sung nó và thử lại.

Bước 3. Tạo lại Cache (trường hợp bạn đang sử dụng Route Cache)

Nếu trước đó bạn đã bật chế độ Cache cho Route, hoặc nếu không có sự khác biệt giữa URL mà bạn đang request so với Route, thì bạn thử tạo cache lại 1 lần nữa bằng artisan command: route:cache, sau đó thử request lại.

Đăng ký để nhận được thông báo mỗi khi có bài viết mới!