2013-04-16 31 views
5

Giả sử tôi có biểu mẫu HTML với nhiều trường. Một số trường thuộc về Sản phẩm, một số thuộc về Đơn đặt hàng, một số trường khác. Khi biểu mẫu được gửi, tôi muốn nhận yêu cầu đó và sau đó tạo biểu mẫu Symfony cho Sản phẩm, Đơn đặt hàng và Khác trong bộ điều khiển. Sau đó, tôi muốn lấy một phần dữ liệu biểu mẫu và liên kết nó với các biểu mẫu thích hợp. Một ví dụ sẽ giống như sau:Cách liên kết biểu mẫu Symfony2 với một mảng (không phải yêu cầu)?

$productArray = array('name'=>$request->get('name')); 
$pf = $this->createForm(new \MyBundle\Form\ProductType(), $product); 
$pf->bind($productArray); 
if($pf->isValid()) { 
    // submit product data 
} 

// Do same for Order (but use order data) 

// Do same for Other (but use other data) 

Vấn đề là khi tôi cố gắng làm điều đó, tôi không thể làm phương thức $ form-> isValid() hoạt động. Dường như bước bind() không thành công. Tôi có một nghi ngờ rằng nó có thể phải làm với mã thông báo mẫu, nhưng tôi không chắc chắn làm thế nào để sửa chữa nó. Một lần nữa, tôi xây dựng hình thức HTML của riêng tôi trong một cái nhìn (tôi đã không sử dụng form_widget(), nguyên nhân của tất cả các biến chứng nó sẽ yêu cầu để hợp nhất bó FormTypes vào một cách nào đó). Tôi chỉ muốn một cách đơn giản để sử dụng biểu mẫu HTML cơ bản cùng với bộ tính năng biểu mẫu Symfony.

Bất cứ ai có thể cho tôi biết điều này thậm chí có thể với Symfony và làm cách nào để tôi thực hiện nó?

Trả lời

2

Bạn cần tắt mã thông báo CSRF để gắn kết dữ liệu theo cách thủ công.

Để thực hiện việc này, bạn có thể chuyển tùy chọn csrf_protection khi tạo đối tượng biểu mẫu.

Như thế này:

$pf = $this->createForm(new \MyBundle\Form\ProductType(), $product, array(
    'csrf_protection' => false 
)); 
+0

cảm ơn rất nhiều bro. Điều này giúp tôi giải quyết vấn đề của mình –

0

tôi cảm thấy như bạn có thể cần một hình thức mà nhúng các hình thức khác:

// Main form 
$builder 
    ->add('product', new ProductType) 
    ->add('order', new OrderType); 

và có một đối tượng có chứa liên kết đến các đối tượng khác mà bạn liên kết theo yêu cầu. Giống như vậy bạn chỉ cần gắn một đối tượng với yêu cầu và truy cập đối tượng nhúng thông qua các getters đơn giản.

Tôi có đủ rõ ràng không?

Các vấn đề liên quan