Symfony form filters
Bài đăng này đã không được cập nhật trong 3 năm
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
-
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ệnhdoctrine: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
-
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:
-
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
- 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ạyphp symfony cc
để xóa sạch cache cũ của config cũ.
- 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 .
- Ví dụ như trong action
index
phần hiển thị filters như sau:
- CHú ý vào hàm
getFormFilterFields
. Hàm này được định nghĩa trongsfModelGeneratorConfiguration
- function
getFilterDisplay
được định nghĩa trongBaseJobGeneratorConfiguration
- 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ả.
- Như đã nói: mọi thứ được khởi tạo theo file config và được đặt trong thư mục cache.
-
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áiis_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
- Khai báo table method
getJobList
cho config. Và khai báo phương thức này trongJobeetJobTable
-
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
-
$this->getPager()
chính là kết quả mà sẽ hiển thị trong trang index. -
Function
getPager()
Xét hàm buildQuery
- ở hàm này sẽ set table method cho filters. hàm
getTableMethod
được định nghĩa trong config do filegenerator
tạo ra làBaseJobGeneratorConfiguration
- function
buildQuery
của filter được định nghĩa trongsfFormFilterDoctrine
như sau
- 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