07/09/2018, 10:39

Hướng Dẫn Xử Lý Lỗi 404 Error trong Laravel

Lỗi không tìm thấy trang hay 404 error thường xuất hiện khi người dùng truy cậ vào một trang sử dụng sai địa chỉ URL. Ví dụ như thay vì truy cập vào trang https://www.codehub.vn/bai-viet thì họ lại truy cập vào trang https://www.codehub.vn/bai-vietv (thừa ký tự v). Trong trường hợp này chúng ta ...

Lỗi không tìm thấy trang hay 404 error thường xuất hiện khi người dùng truy cậ vào một trang sử dụng sai địa chỉ URL. Ví dụ như thay vì truy cập vào trang https://www.codehub.vn/bai-viet thì họ lại truy cập vào trang https://www.codehub.vn/bai-vietv (thừa ký tự v).

Trong trường hợp này chúng ta cần thêm vào ứng dụng web của chúng ta logic xử lý sao cho server trả về một trang báo lỗi thay vì quăng ra thông tin lỗi của PHP. Điều này không những giúp tăng trải nghiệm người dùng mà còn đảm bảo tính bảo mật cho ứng dụng web bằng việc không để lộ các thông tin nhạy cảm của web server.

Trong Laravel việc thêm logic xử lý lỗi 404 có thể được thực hiện một cách rất đơn giản, tham khảo một trong những đoạn hướng dẫn tiếp theo đây phù hợp với phiên bản Laravel bạn đang sử dụng để biết cách thực hiện.

Xử lý lỗi 404 error trong Larave

Laravel Phiên Bản 5.x

Với Laravel từ phiên bản 5 trở lên cơ chế xuất dữ liệu ở tầng View sẽ luôn đi qua một bước xử lý trong method render() trong class Handler trong tập tin larave/app/Exceptions/Handler.php:

public function render($request, Exception $exception)
{
    // code xử lý trước khi xuất dữ liệu
    return parent::render($request, $exception);
}

Do đó chúng ta có thể thêm đoạn code sau để tạo logic xử lý lỗi 404 error cho ứng dụng:

public function render($request, Exception $exception)
{

    if($exception instanceof SymfonyComponentHttpKernelExceptionNotFoundHttpException) {
        return response()->view('errors.404', [], 404);
    }

    return parent::render($request, $exception);
}

Ở đoạn code trên chúng ta thêm một câu lệnh điều kiện ìf để kiểm tra xem object $exception chứa thông tin của lỗi văng ra có phải là instance của class NotFoundHttpException hay không. Nếu đúng thì ứng dụng web của chúng ta sẽ render tập tin errors/404.php hoặc errors/404.blade.php nằm trong thư mục views với HTTP status code là 404 để gửi trả về cho client.

Ở đoạn code dùng để render view phía trên thì đối số thứ hai truyền vào là một mảng trống []`. Mảng này được Laravel dùng để tryền dữ liệu vào tầng View.

Laravel Phiên Bản 4.x

Với Laravel phiên bản 4 cơ chế xuất dữ liệu ở tầng View sẽ hơi khác một chút. Chúng ta cần sử dụng App::missing() trong laravel/app/routes.php để đón các request không khớp với bất cứ route đã được khai báo có trong ứng dụng như sau:

App::missing(function($exception)
{
    return Response::view('errors.missing', array(), 404);
});

Ở đoạn code trên chúng ta sẽ render nội dung trong tập tin errors/missings.php hoặc errors/missings.blade.php trong views với HTTP status code là 404 gửi trả về client. Tương tự như Laravel 5.x, đối số thứ hai trong đoạn code render view trên là một mảng trống array(). Mảng này được Laravel dùng để tryền dữ liệu vào tấng View.

0