Hướng dẫn FormType trong PHP Symfony (Phần 1)

Tram Ho

Chào mọi người hôm nay mình sẽ hướng dẫn cho các bạn đặc biệt là các bạn mới làm quen với framework Symfony cách làm thế nào để tạo FormType cách sử dụng các field type phổ biến hay thường gặp. Àk quên tiếp sau bài này mình sẽ có tiêp bài tiếp theo là về cách làm thế nào để có thể tự custom error hay làm thế nào để kiểm tra validate đối với các trường hợp đặc biệt như thế nào nhé, không nói nhiều nữa bắt đầu thôi

Form Component

Form component hiểu nôm na là một công cụ hay một thứ mà sẽ giúp bạn xử lí các vấn đề thường phát sinh từ end-users khi người dùng thao tác data như thêm, sửa, xóa. Để tạo được Form các bạn hãy làm như sau:

Để xử lý dữ liệu được gửi lên chúng ta sử dụng hàm handleRequest(), hàm này chúng ta chỉ cần truyền vào tham số là object Request.

Ví dụ: Tạo một form đơn giản

Hiển thị form trên trang view:

Rồi khi làm đến bước này rồi các bạn sẽ có ngay cho mình 1 form được hiển thị, tuy nhiên vẫn còn các vấn đề là validate (mình sẽ nói ở bài tiếp theo) hay làm thế nào để chỉnh lại các FieldType bên trong đó theo đúng ý mình thì các bạn đọc tiếp dưới đây nhé.

Text Fields

Text Fields trong nhóm này bao gồm các field types cho phép chúng ta nhập dữ liệu như: TextType, TextareaType, NumberType, PasswordType…
Các options thường dùng có trong TextType là:

  • attr: Option này này cho phép chúng ta thêm các attributes cho field khi được hiển thị ra HTML, giá trị nhận vào là kiểu array.
  • data: Cái này cho phép chúng ta thiết lập giá trị cho field, giá trị nhận vào là tất cả các kiểu dữ liệu.
  • disabled: Nếu bạn không muốn người dùng thay đổi dữ liệu trên field thì bạn sử dụng option này, giá trị nhận vào là kiểu boolean và mạc định sẽ là false
  • label: thiết lập label cho field này
  • mapped: option này là khi bạn muốn field được mapping với đúng cấu trúc dữ liệu đã được định nghĩa trước đó chảng hạn như khi bạn đã định nghĩa một Enity/Model có chừng đó thuộc tính/ attributes thì khi set giá trị là true thì nó sẽ tự động mapping với Enity/Model mà bạn đã định nghĩa, còn trường hợp là false thì bạn có thể tạo ra một field mà tên của nó chảng có trong thuộc tính/ attributes của một Enity/Model. Tàm tạm là như thế sau này mình sẽ có một bài viết nói kĩ hơn về cái này và cách dùng nó trong thường hợp thực tế.
  • required: Cái tên đã nói lên tất cả

Và còn nhiều các options khác nhưng trên đây là các options thường hay gặp nhất trong nhóm Text Fields
VD: Cách tạo 1 TextField

Choice Fields

Choice Fields cho phép người dùng lựa chọn một hoặc nhiều khi gen ra nó sẽ là các thẻ select, radio…. Trong nhóm này có ChoiceType, EntityType là được sử dụng thường xuyên. Vì là được sử dụng thường xuyên nên bài viết này mình sẽ chỉ nói 2 cái này thôi

  1. ChoiceType: Cái này khi gen ra HTML thì nó là thẻ select, chúng ta có thể biến đổi nó để có thể trở thành dropdown hay select, 1 nhóm radio buttons
  2. EntityType: Cái này mình thường đùng nó để tạo ra cá dropdown (khi gen ra so cũng là select).
    Điểm khác biệt giữa 2 cái này đó là: ChoiceType chỉ được dùng để hiển thị các dữ liệu đơn giản các dữ liệu set cứng ví dụ như dùng nó để hiển thị ra các giá trị trong enums chảng hạn, còn EntityType được dùng để hiển thị các dữ liệu được load từ database.
    Các options trong nhóm Choice Fields cũng chảng có gì khác biệt lớn so với Text Fields ngoại trừ:
  • choice_attr: Thường được dùng để thêm các attribute vào mỗi các thẻ option của select
  • group_by: nếu bạn đã biết đến việc 1 select nó cho phép chia ra các group thì cái này sẽ có tác dụng như vậy nhé
  • multiple: option này cho phép chúng ta có được chọn nhiều (multi select/choice) hay không.

VD: Cách tạo một ChoiceType

VD: Cách tạo một EntityType

Vậy thôi nói chung là chừng này là đã đủ dùng rồi

Date and Time Fields

Các fields trong nhóm nhày sẽ có cách hiển thị trên HTML là các input cho phép thiết lập ngày/tháng/ năm hay thời gian, nó có thể hiển thị theo nhiều cách khác nhau thông qua widget. Lướt qua một số các options thì rất giống với Choice Fields và TextFields.
VD: Cách tạo một DateType:

Còn lại các Fields khác như: Field Group, Hidden Fields, Button cũng chảng có gì đặc biệt nhưng vẫn còn rất nhiều thứ phải nói như validation, form collection…. Tóm lại trên đây mình đã giới thiệu các fields mà hay thường gặp nhất, bài viết hôm sau mình sẽ hướng dẫn về validation, custom validation trên một form như thế nào nhé.

Tham khảo

Tham khảo: https://symfony.com/doc/current/reference/forms/types.html

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo