07/09/2018, 10:47

Laravel: Cách tạo flash message trên trang

Flash message là loại message được hiển thị một lần để thông báo về trạng thái của một hành động nào đó. Ví dụ như khi người dùng tạo bài viết thành công thì ở trang mà người dùng được chuyển tiếp tới theo (thường là trang hiển thị bài viết), chúng ta sẽ muốn hiển thị một thông báo cho người ...

Flash message là loại message được hiển thị một lần để thông báo về trạng thái của một hành động nào đó. Ví dụ như khi người dùng tạo bài viết thành công thì ở trang mà người dùng được chuyển tiếp tới theo (thường là trang hiển thị bài viết), chúng ta sẽ muốn hiển thị một thông báo cho người dùng biết về điều này. Tuy nhiên nếu người dùng refresh lại trang thì thông báo sẽ không xuất hiện.

Để tạo flash message có nhiều cách khác nhau. Tuy nhiên nếu bạn sử dụng Laravel framework thì bạn có thể implement theo phương pháp sử dụng Session. Quy trình này như sau:

  • Bước 1: Ở phía client, người dùng sử dụng trình duyệt để gửi request lên server để thực hiện hành động nào đó ví dụ như tạo bài viết.
  • Bước 2: Server nhận được request và thực hiện hành động. Trạng thái của hành động sau đó sẽ được lưu vào Session của người dùng.
  • Bước 3: Trình duyệt chuyển tiếp người dùng tới một trang mà trên đó hiển thị thông tin của trạng thái tạo bài viết trong Session. Giá trị thông tin này sẽ được xoá khỏi Session sau khi được sử dụng.

Trong Laravel, những dữ liệu được lưu trong session và được sử dụng một lần như trên gọi là flash data.

Tạo Flash Data Trên Controller

Trong tầng controller của Laravel để lưu flash data trong Session chúng ta sẽ gọi phương thức session trong của class Request đoạn code sau:

class PostsController {
    function store(Request $request) {
        ...
        $request->session()->flash('status', 'Tạo bài viết thành công!');
        ...
    }
}

Lấy Flash Data Trong View

Sau khi tạo flash data trên controller chúng ta sử dụng hàm session() của PHP để lấy ra dữ liệu flash data được lưu trong session:

    {{-- Hiển thị thông tin trạng thái tạo bài viết --}}
    @if (session('status'))
        <div class="alert alert-info">{{session('status')}}</div>
    @endif

Đoạn code trên sử dụng blade template của Laravel để kiểm tra giá trị của status trong session có tồn tại hay không nếu có sẽ hiển thị nội dung thông báo.

0