Thành phần biểu mẫu Symfony 2 thực sự là một cái gì đó. Tôi đoán bạn biết điều đó. Cố gắng để hiểu những gì làm việc như thế nào chỉ là một nhiệm vụ dường như không thể; và tôi khá nhiều kinh nghiệm tại duyệt qua codebases .. Nhưng người đàn ông, thành phần Form .. OMGBiểu mẫu Symfony: Cách thay thế lớp biểu mẫu/truy xuất tất cả dữ liệu bổ sung?
TL; DR
Dưới đây là thông tin chi tiết, vấn đề này cố gắng hỏi
- Is có thể thay thế lớp học
\Symfony\Component\Form\Form
? - Hoặc: Làm thế nào để dễ dàng có được tất cả dữ liệu bổ sung từ tất cả các trường dạng biểu mẫu của biểu mẫu?
- Hoặc, một câu hỏi liên quan: Làm thế nào trên trái đất nó hoạt động nếu tôi làm
$form->add('ss', 'form')
- rõ ràng là lớpCore\FormType
được tham gia nhưng khi tôi truy xuất lại sau, nó là một thể hiện của\Symfony\Component\Form\Form
? Điều đó xảy ra ở đâu và điều này có thể bị quá tải để nó sử dụng một lớp khác không?
Chi tiết
Tình hình
Hãy tưởng tượng một điều khiển mà nhận được một JSON tải trọng n sâu. Trọng tải này được giải mã và xác thực thông qua Biểu mẫu. Bây giờ, hầu hết cấu trúc JSON này được ánh xạ bởi các Mô hình (Các thực thể của Doctrine ODM). Nhưng một số thuộc tính phụ chỉ là "băm" - khách hàng được phép đăng bất cứ điều gì anh ta muốn ở đó.
Các tài khoản con "băm" đó là các trường có dạng, được gắn cờ và có thể có thêm các trường.
Vấn đề
Tóm lại vấn đề của chúng tôi là, rằng tất cả các "trường bổ sung" không được trả về bởi $form->getData()
. Chúng tôi không thể chỉ định các trường đó (và loại của chúng) vì chúng tôi không biết điều gì sẽ đến - vì vậy tất cả dữ liệu này là một phần của dữ liệu thừa.
Giải pháp?
Vì vậy, tôi nghĩ - OK - hãy sửa đổi FormFactory để nó sẽ trả về Tiện ích mở rộng tùy chỉnh của chúng tôi - một trong đó cũng trả về extraData khi getData được gọi. Dễ dàng phải không? Noo, không dễ dàng ..
Ý tưởng của tôi cho phép tôi kiểm tra FormFactory, FormBuilders, ResolvedFormTypes, whatnot .. và tại tất cả các địa điểm quan trọng (như formBuilder->getForm()
) - các lớp tôi muốn ghi đè/thay thế là instanciated tĩnh - không sử dụng của DIC .. (!)
Điều này thực sự là đúng cách để đi .. Mặc dù tôi đã tìm ra sau khi đặt câu hỏi. Vì vậy, hãy tìm hiểu: Nếu muốn lưu trữ các cấu trúc linh hoạt lớn từ các tải trọng JSON, người ta phải định nghĩa một FormType mở rộng 'Symfony \ Component \ Form \ AbstractType' (như' lớp FreeForm mở rộng AbstractType') - sau đó có 'getParent()' return 'text 'và về cơ bản bạn có thể lưu trữ bên trong những gì bạn mong muốn. – narcoticfresh