0

Symfony form filters

Symfony Filters

1. Tạo một filter

  • Một filter là một phần của việc thực thi code trước bất kì action nào. Đó là thứ mà chúng ta cần để xem xét việc tên máy chủ của tất cả các actions trong việc tìm kiếm một tên miền nào đó .

  • Filters phải được định nghĩa trong một file configuration đặc biệt để thực thi. Ví dụ: /apps/frontend/config/filters.yml. File này được tạo ra mặc định khi bạn khởi tạo application và nó là trống.

/apps/backend/config/filters.yml Screenshot from 2016-04-25 13:47:02.png

  • việc config filters là khá giống với việc config form từ views. Và thật ra thực tế, filters chỉ là một form mà thôi. Và giống như form các class filters được tạo ra bởi doctrine:build -- all task. Bạn cũng có thể khở tạo lại chúng với lệnh doctrine:build --filters

  • Ngày hôm nay chúng ta sẽ làm quen với filters ở phần back-end của project. Tại sao lại như vậy . Đơn giản là vì ở back-end thì nó đã được khởi tạo defaul trong action rồi . Còn front-end thì chúng ta phải mất công re-build lại mà thôi 😄 .

  • Symfony cung cấp rất nhiều tùy chọn giúp lập trình viên không phải code nhiều ở phần back-end.

  • Mặc định sau khi khởi tạo module thì filters sẽ bao gồm tất cả các trường của object

Screenshot from 2016-04-25 14:53:22.png

  • Việc config back-end module là việc chỉnh sửa file config/generator.yml

  • Ta thực hiện chỉnh sửa lại như sau: Screenshot from 2016-04-25 16:09:04.png

  • Ta không cần hiện thị đầy thủ các thuộc tính của đối tượng job nên chỉ hiện thị 1 số field cần thiết như hình trên.

  • Tương tự config với filters

Screenshot from 2016-04-25 16:18:15.png

  • Phần back-end đều được tạo ra 1 cách tự động các actions, template và được lưu giữ ở trong thư mục cache vì thế sau khi sửa bất kì cái gì ở các file config bạn cần phải chạy php symfony cc để xóa sạch cache cũ của config cũ.

Screenshot from 2016-04-25 16:22:00.png

  • Các bạn có thể tìm hiểu sâu hơn vào cơ chế hoạt động của filters back-end nói chung và cả back-end nói riêng . Về cơ bản thì file generator.yml sẽ sinh ra file config trong thư mục lib của module .

Screenshot from 2016-04-25 16:27:26.png

  • Ví dụ như trong action index phần hiển thị filters như sau:

Screenshot from 2016-04-25 16:33:25.png

  • CHú ý vào hàm getFormFilterFields. Hàm này được định nghĩa trong sfModelGeneratorConfiguration

Screenshot from 2016-04-25 16:34:23.png

  • function getFilterDisplay được định nghĩa trong BaseJobGeneratorConfiguration

Screenshot from 2016-04-25 16:35:15.png

  • Cơ chế hoạt động khá phức tạp. Nhưng đổi lại lập trình viên chỉ cần sửa lại vài dòng trong file config là xong . không cần quan tâm framework xử lý như thế nào phải không ạ.

2. Cơ chế hoạt động của back-end filter

  • Lấy ví dụ với action index. Sau khi khở tạo module ở back-end. Ta mở file action và thấy nó chẳng có gì cả.

Screenshot from 2016-04-25 16:48:54.png

  • Như đã nói: mọi thứ được khởi tạo theo file config và được đặt trong thư mục cache.

Screenshot from 2016-04-25 16:49:40.png

  • Mặc định thì action index sẽ hiển thị tất cả các job nhưng nếu bạn chỉ muốn chỉ hiển thị các job ở trạng thái is_activated thì sao.

  • Bạn có thể sửa file config nhằm đưa khởi tạo 1 câu query mặc định cho filters

Screenshot from 2016-04-25 16:59:21.png

  • Khai báo table method getJobList cho config. Và khai báo phương thức này trong JobeetJobTable

Screenshot from 2016-04-25 17:00:16.png

  • Khi đó thì mặc định filters sẽ lấy câu query ở function này làm câu query mặc đinh lúc khởi tạo sau đó mới add thêm các điều kiện từ form filters.

  • Có vẻ như vẫn chưa rõ ràng là tại phương thức kia được add vào filter như thế nào. Bây giờ ta sẽ đi sâu vào cơ chế hoạt động của filter :

  • action index

Screenshot from 2016-04-25 17:02:31.png

  • $this->getPager() chính là kết quả mà sẽ hiển thị trong trang index.

  • Function getPager()

Screenshot from 2016-04-25 17:03:45.png

Xét hàm buildQuery

Screenshot from 2016-04-25 17:22:42.png

  • ở hàm này sẽ set table method cho filters. hàm getTableMethod được định nghĩa trong config do file generator tạo ra là BaseJobGeneratorConfiguration

Screenshot from 2016-04-25 17:27:12.png

  • function buildQuery của filter được định nghĩa trong sfFormFilterDoctrine như sau

Screenshot from 2016-04-25 17:28:39.png

Screenshot from 2016-04-25 17:29:14.png

  • Như các bạn thấy nếu có tableMethod được khai báo thì $query mặc định sẽ được lấy từ tableMethod. Sau đó $query này sẽ được add thêm các điều kiện từ form filter chuyển đến .

All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí