2012-11-06 13 views
6

Mam problem z korzystaniem z Kreatora formularzy w Symfony2. Aby być dokładnym, potrzebuję pola wejściowego, które jest tablicą html, ale nie mogę go utworzyć za pomocą createFormBuilder-> add. Oto, co starałem:Utwórz pole wprowadzania pola przy użyciu kreatora formularzy symfony2

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

I tak dalej, ale pojawia się następujący wyjątek:

nazwą "atrybut [0]" zawiera niedozwolone znaki. Nazwy powinny zaczynać się od litery,> cyfry lub podkreślenia i zawierać tylko litery, cyfry, cyfry, podkreślenia ("_"), łączniki> ("-") i dwukropki (":").

Czy istnieje jakieś dobre rozwiązanie lub muszę ręcznie utworzyć pola?

Z góry dziękuję!

EDIT: wyjaśnienie tego dalej ... chcę coś takiego być generowane:

<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> 

Pomoc?

Odpowiedz

4

Możesz utworzyć tablicę pól wejściowych za pomocą pola "collection'-field.

Dokumentacja o tym, jak z niego korzystać można znaleźć tutaj:

Collection documentation

Jeśli to nie jest wystarczająco jasne, czy nadal masz pytania Chętnie pomogą Ci się z nimi.

+0

Wielkie dzięki! To wygląda dobrze, spróbuję tego teraz! – markoub

+0

Przepraszam, dodatkowe uwagi ...: -/Okazuje się, że potrzebuję czegoś prostszego ... Mam bardzo szczegółową listę atrybutów, które użytkownik może ustawić dla każdej oferty, i chcę, aby były wymienione jako "atrybut [0]", "atrybut [1]" i tak dalej. Właściwie, potrzebuję również używać różnych indeksów tablicowych, ale to nie jest takie ważne. Podsumowując, jest to bardziej skomplikowane, ponieważ pozwala mi dodać opcję użytkownika do tworzenia nowych formularzy w formularzu, z zestawem pól. Po prostu chcę uzyskać zamiast nazw "atrybut_1", "atrybut_2" i tak dalej, tablica atrybutów. – markoub

+0

Nie jest dla mnie jasne, czego teraz chcesz. jeśli możesz podać przykładowy kod (html) formularza, który chcesz wygenerować, być może będę mógł Ci pomóc. –

13

Jak podaje poprzednia odpowiedź, należy użyć typu kolekcji lub postaci zagnieżdżonej, gdzie każde pole odpowiada jednemu wpisowi tablicy. Oraz w przypadkach, gdy nie można/nie chcą tego zrobić, można wykonać następujące czynności:

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

Dzięki, zacząłem używać kolekcji. – markoub

1

Ponadto można ovveride pole w gałązka. Przykład:

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

Gdzie krok jest twój indeks.

Powiązane problemy