2012-11-06 35 views
6

Tôi gặp sự cố khi sử dụng Trình tạo biểu mẫu trong Symfony2. Để chính xác, tôi cần trường đầu vào là mảng html, nhưng tôi không thể tạo nó bằng createFormBuilder-> add. Đây là những gì tôi đã cố gắng:Tạo trường nhập mảng với trình tạo biểu mẫu symfony2

$attributesForm = $this->createFormBuilder() 
     ->add('attribute[0]', 'text') ... 

Và như vậy, nhưng tôi nhận được ngoại lệ sau đây:

Cái tên "thuộc tính [0]" chứa các ký tự bất hợp pháp. Tên phải bắt đầu bằng một chữ cái,> chữ số hoặc dấu gạch dưới và chỉ chứa chữ cái, chữ số, số, dấu gạch dưới ("_"), dấu gạch nối> ("-") và dấu hai chấm (":").

Có giải pháp hay nào hoặc tôi phải tạo trường theo cách thủ công?

Cảm ơn trước!

EDIT: để làm rõ điều này hơn nữa ... Tôi muốn một cái gì đó như thế này để được tạo ra:

<div id="msoft_adminbundle_offertype"> 
<div>Name <input type="text" name="name"></div> 
<div>...</div> 
<div>Attribute 0 <input type="text" name="attribute[0]"></div> 
<div>Attribute 1 <input type="text" name="attribute[1]"></div> 
<div>Attribute 3 <input type="text" name="attribute[3]"></div> 
<ul> 
    </ul> 
<p> 
    <button type="submit">Edit</button> 
</p> 

Trợ giúp?

Trả lời

4

Bạn có thể tạo một mảng trường nhập bằng cách sử dụng loại 'bộ sưu tập'.

Tài liệu về cách sử dụng nó có thể được tìm thấy ở đây:

Collection documentation

Nếu đó không phải là đủ rõ ràng hoặc bạn vẫn còn thắc mắc tôi sẽ sẵn sàng giúp bạn với họ.

+0

Cảm ơn rất nhiều! Điều đó có vẻ đúng, tôi sẽ thử ngay bây giờ! – markoub

+0

Xin lỗi, ghi chú bổ sung ...: -/Hóa ra tôi cần một cái gì đó đơn giản hơn ... Tôi có danh sách rất cụ thể các thuộc tính mà người dùng có thể đặt cho mỗi phiếu mua hàng và tôi chỉ muốn chúng được liệt kê là "thuộc tính [0]", "thuộc tính [1]", v.v. Trên thực tế, tôi cũng cần phải sử dụng các chỉ mục mảng khác nhau, nhưng nó không phải là quan trọng. Vì vậy, để tóm tắt, điều này phức tạp hơn, nó cho phép tôi thêm tùy chọn người dùng để tạo biểu mẫu mới bên trong biểu mẫu, với tập hợp các trường. Tôi chỉ muốn có được thay vì tên "attribute_1", "attribute_2" và như vậy, mảng thuộc tính. – markoub

+0

Nó không rõ ràng với tôi những gì bạn thực sự muốn bây giờ. nếu bạn có thể cung cấp mã mẫu (html) của biểu mẫu như bạn muốn nó được tạo, tôi có thể giúp bạn thêm. –

13

Khi trạng thái câu trả lời trước đó, hãy sử dụng loại bộ sưu tập hoặc biểu mẫu lồng nhau, trong đó mỗi trường tương ứng với một mục nhập của mảng. Và trong trường hợp bạn không thể/không muốn làm điều đó, bạn có thể làm như sau:

->add('attribute_0', 'text', array(
    'property_path' => 'attribute[0]', 
)) 
+0

Cảm ơn, tôi đã bắt đầu sử dụng bộ sưu tập. – markoub

1

Ngoài ra, bạn có thể điền trường ovveride trong TWIG. Ví dụ:

{{ form_row(form[field_name],{ 'full_name': 'attribute[' ~ step ~ ']' })}} 

Trường hợp bước là chỉ mục của bạn.

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