Symfony form (P2)
Bài đăng này đã không được cập nhật trong 3 năm
Symfony Form (P2)
Phần 1 bạn có thể đọc tại đây
https://viblo.asia/cuongnv_540/posts/157G5orlRAje
Thay đổi các widgets mặc định
Trở lại với ví dụ của chúng ta.
- Với trường
Type
bạn có thể thấy kiểu dữ liệu là text. Người dùng có thể nhập bất kì thứ gì họ muốn. Như vậy có thể gây khó khăn cho việc phân loại. - Với trường hợp này chúng ta chỉ có thể quy định các kiểu
type
củajob
trước và sau đó người dùng sẽ lựa chọn các lựa chọn có sẵn . - Có nhiều cách để có thể khai báo loạt biến về
type_job
bạn có thể định nghĩa trong model củajob
chẳng hạn. Nhưng ở đây tôi sẽ coi như một biến chung của hệ thống và lưu vàoapp.yml
. - Mặc định khi khởi tạo project thì các application đều có
app.yml
riêng cho các app đó. Nếu bạn muốn tạo mộtapp.yml
chung cho cả project thì bạn tạo trong thư mụcconfig
.
- Sau khi tạo file thì bạn tạo biến lưu trữ các giá trị định nghĩa của
type_job
- Trên đây là nội dung file
config/app.yml
. Biến này là sử dụng chung cho các môi trường phát triển nên đặt ởdefault:
.
Chú ý: về biến type_job
khi gọi sfConfig::get('app_job_type_job')
sẽ trả về array(1 => 'Full time'...) vì app.yml
chỉ quản lý đến level lưu trữ thứ 2. Tức là từ lv 2 trở thì chỉ có thể gọi được bằng cách gọi tới lv 2 . rồi từ mảng trả về get lấy dữ liệu.
- Xong công việc chuẩn bị chúng ta sẽ sửa lại widget của trường
type
.
Khi đó ta có kết quả ở view như sau:
-
Giá trị ở trường type sẽ được set mặc định trùng với giá trị của của trường type của object khởi tạo.
-
Tương tự bạn có thể sửa lại các trường các của form theo ý của bạn sao cho phù hợp.
Tạo mới widget, validator
-
Như đã giới thiệu phần trên. Bạn có thể đổi sử dụng các widget hoặc validator mà symfony cung cấp sẵn một cách linh hoạt cho phù hợp.
-
Nhưng nếu chúng vẫn chưa đủ để đáp ứng nhu cầu của bạn thì sao ? => Vậy thì bạn hãy tự tạo widget, validator cho riêng mình
-
Lấy ví dụ với trường
email
. Validator mặc định của nó làsfValidatorString
-
Trên đây là nội dung của
sfValidatorString
chỉ đơn giản là cung cấp cácoptions
vàmessage
khi string nhập vào quá dài hoặc quá ngắn hoặc là string rỗng. -
Nếu yêu cầu về trường email này không nhiều bạn có thể sử dụng
sfValidatorEmail
nó có thể đáp ứng được như cầu cơ bản cho bạn. Nhưng ở đây tôi muốn xấy dựng một validator email cho riêng project của tôi. Đặt tên làPrValidatorEmail
.
- Với validator này thì tôi đã thay đổi lại các thông báo lỗi sao cho phù hợp
Tài liệu tham khảo: http://symfony.com/legacy/doc/forms/1_4/en/01-Form-Creation
All rights reserved