Symfony form (P2)

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

Screenshot from 2016-01-26 09:24:47.png

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ủa job 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ủa job 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ào app.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ột app.yml chung cho cả project thì bạn tạo trong thư mục config.

Screenshot from 2016-01-26 10:56:53.png

  • 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

Screenshot from 2016-01-26 10:59:10.png

  • 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.

Screenshot from 2016-01-26 11:38:04.png

Khi đó ta có kết quả ở view như sau:

Screenshot from 2016-01-26 13:55:57.png

  • 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 Screenshot from 2016-01-26 14:13:24.png

  • Trên đây là nội dung của sfValidatorString chỉ đơn giản là cung cấp các optionsmessage 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.

Screenshot from 2016-01-26 14:39:54.png

  • 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

Screenshot from 2016-01-26 14:40:44.png

Screenshot from 2016-01-26 14:41:18.png

Screenshot from 2016-01-26 14:41:35.png

Tài liệu tham khảo: http://symfony.com/legacy/doc/forms/1_4/en/01-Form-Creation


All Rights Reserved