Thứ Tư, 17 tháng 6, 2015

Tìm hiểu Filter trong Laravel 4.X

Trong bài trước chúng ta đã đi tìm hiểu Controller trong Laravel. Tiếp theo chúng ta sẽ đi Tìm hiểu Filter trong Laravel 4.X. Vậy Filter là gì và dùng để làm gì?

Filter là một bộ lọc, nó có chức năng lọc dữ liệu từ phía người dùng trước hoặc sau khi nó chạm tới Route. Do đó, nếu bạn tận sử dụng filter một cách thông minh thì website của bạn sẽ được an toàn hơn, điều này sẽ giúp bạn xử lý dữ liệu tối ưu hơn.

Filter trong Laravel sẽ cho phép bạn kiểm tra dữ liệu một cách độc lập sau đó lồng ghép một cách khéo léo vào route mà bạn mong muốn. Thì ngay khi request tới với route sẽ bị lọc bởi filter và xử lý. Nếu hợp lệ thì mới tiếp tục đi tới route còn nếu không thì sẽ thực thi một yêu cầu do bạn đặt ra.

Để thiết lập filter ta vào file filters.php và tạo filter với nội dung :
Route::filter('tên_filter',hàm_xử_lý);
Ví dụ: Kiểm tra thời gian hiện tại là buổi sáng hay buổi chiều ta có
Route::filter('check_time',function($route,$request){
    if(date('A') == "AM"){
        return "Buổi sáng!";
    }
});
Ta có hàm date(‘A’) sẽ trả về AM hoặc PM tùy theo thời gian của hệ thống. Ta sử dụng filter để lọc nếu thời gian là buổi sáng (AM) thì sẽ trả về ngay giá trị “Buổi sáng!” mà không đưa yêu cầu tới route.

Bây giờ ta tiến hành filter vào route

Mở file routes.php thêm vào cú pháp sau:
Route::get("thoigian/checktime",array("as"=>"checktime","before"=>"check_time","uses"=>"ThoigianController@showtime"));
Bạn thấy đấy, trong mảng đối số truyền vào, tôi thiết lập filter với khóa before chỉ tới check_time. Sau đó đẩy nó sang controller thoigian với action là showtime.

Tạo tiếp file ThoigianController.php với nội dung sau:
<?php
class ThoigianController extends BaseController{
    public function showtime(){
        return "Buổi chiều!";
    }
}
Truy cập tới địa chỉ: localhost/laravel/public/thoigian/showtime.

Lưu ý: Filter chia ra 2 loại là before và after.

  • Before: Nghĩa là request trước khi tới routing
  • After: Nghĩa là request sau khi tới routing.

Tuy nhiên, trong thực tế khi lập trình PHP, người ta thường sử dụng before là chính, còn after chỉ sử dụng thực hiện các công đoạn dọn dẹp. Ví dụ như hủy biến, hủy phiên làm việc,….

Truyền giá trị vào Filter

Để truyền giá trị vào filter ta sử dụng cú pháp
tên_Filter:giá trị

Ta có thể tùy chỉnh lại ví dụ ở trên như sau:
Route::filter('check_time',function($route,$request,$param){
    if(date('A') == "AM"){
        return "Buổi sáng!";
    }
});
Lưu ý: chúng ta có thêm một tham số $param trong function. Và $param này chính là giá trị chúng ta truyền từ quá trình thiết lập ở Route.

Giờ sửa lại phần routes.php như sau:
Route::get("thoigian/checktime",array("as"=>"checktime","before"=>"check_time:PM","uses"=>"ThoigianController@showtime"));
Và truy cập lại đường dẫn : localhost/laravel/public/thoigian/showtime để xem kết quả.

Nguồn: the gioi web

SHARE THIS

0 nhận xét:

Lưu ý: Chỉ thành viên của blog này mới được đăng nhận xét.