Hướng dẫn FormType trong PHP Symfony – Nested form (CollectionType Field) phần 1

Tram Ho

Chào mọi người hôm nay mình sẽ tiếp tục với FormType trong Symfony Framework hôm trước mình đã hướng dẫn cách sử dụng các field type phổ biến hay thường gặp. Tiếp tục bài hôm nay mình sẽ hướng dẫn các bạn làm thế nào để có thể tạo ra nested form trong Symfony như thế nào nhé

Giới Thiệu:

Với các framework khác thì chúng ta thường gọi là nested form nhưng đối với Symfony thì nó là Collection Type field type này thường được sử dụng để render ra các collection form con chứa bên trong một form lớn, chúng ta có thể dễ dàng thực hiện các thao tác thêm, xóa, sửa, validate trên collection form con. VD:
Bạn có 2 entity (model) là Task và Tag mối liên kết giữa 2 entity này là one-to-many (1 Task – N Tag), bây giờ chúng ta tạo ra 1 form là của Task bên trong form này chúng ta chứa nhiều các input control form của Tag .

Nested form (CollectionType Field)

Tạo Entity (Model)

Trước khi bắt đầu mình sẽ tạo ra 2 entity là TaskTag như sau:

  • src/Entity/Task.php:

  • src/Entity/Tag.php:

Tạo FormType

Tiếp theo mình sẽ tạo ra 2 form type tương ứng với 2 entity trên là TaskTypeTagType nếu các bạn đã quên cách tạo form type như thế nào thì các bạn có thể tham khảo ở các bài viết trước mình có hướng dẫn cách tạo form type:

  • src/Form/TaskType.php:

  • src/Form/TagType.php:

Bây giờ chúng ta đã tạo ra được 2 form type tương ứng với 2 entity là TaskTag, bây giờ mình sẽ add TagType vào trong TaskType như 1 collection type hay nested như sau:
Ở trong file src/Form/TaskType.php các bạn add thêm 1 type là CollectionType với field option entry_type link đến TagType:

OK đến bước này là bạn đã tạo ra được 1 form type Task bên trong chứa form type Tag là nested form. Bây giờ công việ cuối cùng chúng ta sẽ phải hiển thị nó lên view.

Render template

Các bạn mở bất kì template .twig nào mà các bạn muốn nó hiển thị ra và làm như thế này:

Kết luận

Trên đây mình đã hướng dẫn làm thế nào để tạo ra nested form trong symfony một phần cũng rất cần thiết và hay gặp trong các dự án chạy symfony cũng khá là thú vị đúng không nhỉ Ở các phần tiếp theo mình sẽ hướng dẫn làm thế nào để có thể thực hiện các thao tác thêm, xóa, sửa, validate cho nested form nhé

Tham khảo

https://symfony.com/doc/current/reference/forms/types/collection.html

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo