2012-02-28 16 views
9

Chcę uzyskać wszystkie zmienne dostępne w pliku motywu formularza Symfony form_div_layout.html.twig, czytałem oficjalną dokumentację Symfony i wyszukiwane w Internecie, ale nie mogłem znaleźć żadnych przydatnych informacji na ten temat, czy ktoś może mi pomóc?Czy istnieje pełna lista zmiennych, których można użyć w formularzu_div_layout.html.twig?

+0

przykro ... znaleźliście mój odpowiedź jest przydatna? – coma

+0

Zmarnowałem również tyle czasu. –

Odpowiedz

1

Można wyciągnąć wszystkie te z oryginalnego pliku, a tylko overload te, które potrzebne są:

vendor/symfony/src/Symfony/Bridge/Twig/Resources/views/Form/form_div_layout.html.twig 
+0

W rzeczywistości problem polega na tym, że mam formularz z kolekcją, chcę, aby widżety w kolekcji używały innego motywu, który różni się od formy nadrzędnej. Nie wiedziałem, jak to zarchiwizować. – imikay

+0

Próbowałem utworzyć niestandardową kompozycję dla niestandardowego pola, ale widżety odnoszą się do siebie nawzajem, próbowałem podążać za łańcuchem, aby nadpisać każdy z nich, ale jestem zagubiony. – imikay

+0

czy możesz wkleić to, co masz do tej pory, i źle zobaczyć, czy mogę ci w tym pomóc – chasen

7

uderzę ten sam problem niedawno, jest brak dokumentacji na dostępnych zmiennych (atrybuty) podczas pracy w motywach. W końcu znalazłem moje rozwiązanie, przeszukując folder dostawcy (trochę potrwał) dla zmiennych, które znałem, aby zobaczyć, co jeszcze jest dostępne.

Najlepszym miejscem dla mnie było spojrzeć tutaj: Symfony \ Komponent \ Form \ Extension \ Rdzeń \ Type

typu bazowego, będąc FieldType zapewnia tych zmiennych poprzez buildView

$view 
     ->set('form', $view) 
     ->set('id', $id) 
     ->set('name', $name) 
     ->set('full_name', $fullName) 
     ->set('errors', $form->getErrors()) 
     ->set('value', $form->getClientData()) 
     ->set('read_only', $form->isReadOnly()) 
     ->set('required', $form->isRequired()) 
     ->set('max_length', $form->getAttribute('max_length')) 
     ->set('pattern', $form->getAttribute('pattern')) 
     ->set('size', null) 
     ->set('label', $form->getAttribute('label')) 
     ->set('multipart', false) 
     ->set('attr', $form->getAttribute('attr')) 
     ->set('types', $types) 
    ; 

prototyp atrybut, który istnieje tylko w typie kolekcji, tak jak allow_add i allow_delete, zobacz CollectionType w tym samym folderze.

Po podstawowym FieldType wygląda na to, że jest to pełna lista.

CheckboxType.php:  ->setAttribute('value', $options['value']) 
ChoiceType.php:   ->setAttribute('choice_list', $options['choice_list']) 
ChoiceType.php:   ->setAttribute('preferred_choices', $options['preferred_choices']) 
ChoiceType.php:   ->setAttribute('multiple', $options['multiple']) 
ChoiceType.php:   ->setAttribute('expanded', $options['expanded']) 
ChoiceType.php:   ->setAttribute('required', $options['required']) 
ChoiceType.php:   ->setAttribute('empty_value', $emptyValue) 
CollectionType.php:  ->setAttribute('prototype', $prototype->getForm()); 
CollectionType.php:  ->setAttribute('allow_add', $options['allow_add']) 
CollectionType.php:  ->setAttribute('allow_delete', $options['allow_delete']) 
DateTimeType.php:  ->setAttribute('widget', $options['widget']); 
DateType.php:   ->setAttribute('formatter', $formatter) 
DateType.php:   ->setAttribute('widget', $options['widget']); 
FormType.php:   ->setAttribute('virtual', $options['virtual']) 
MoneyType.php:   ->setAttribute('currency', $options['currency']) 
PasswordType.php:  ->setAttribute('always_empty', $options['always_empty']); 
RadioType.php:   ->setAttribute('value', $options['value']) 
TimeType.php:   ->setAttribute('widget', $options['widget']) 
TimeType.php:   ->setAttribute('with_seconds', $options['with_seconds']) 
+0

Dzięki, spróbuję i zobaczę, jak mogę z nich korzystać. – imikay

+0

W 'collectionType', jak możemy iterować każde pole wejściowe zawarte w kolekcji?Czy wiesz, jak uzyskać dostęp do elementów nadrzędnych lub części całego formularza? [Zobacz to pytanie] (http://stackoverflow.com/questions/26184990/set-the-input-labels-for-each-field-as-headers-in-symfony-collection-widget) –

16

Cóż, można uzyskać wszystkie dostępne zmienne w każdym bloku przez powtarzanie kontekstu:

{% block form_widget_simple %} 
<ol> 
    {% for key, value in _context %} 
    <li>{{ key }}</li> 
    {% endfor %} 
</ol> 
{% spaceless %} 
    {% set type = type|default('text') %} 
    <input type="{{ type }}" {{ block('widget_attributes') }} {% if value is not empty %}value="{{ value }}" {% endif %}/> 
{% endspaceless %} 
{% endblock form_widget_simple %} 

A jeśli chcesz używać je, a następnie będziesz musiał nadpisać klas, które faktycznie renderowania są te widgety, wystarczy spojrzeć na AbtractType :: buildView ...

Jak sugeruje @Gregoire, można użyć {{ dump(_context) }} od wersji 1.5 (http://twig.sensiolabs.org/doc/functions/dump.html), ale należy pamiętać, że będzie to wydrukować dużą ilość informacji.

+1

Możesz również dodać '{{dump (value)}}' w pętli, aby wyświetlić zawartość zmiennych. – Gregoire

+0

O Boże, dziękuję bardzo. –

+0

@Gregoire In Symfony 2.5 '{{dump (value)}}' sprawia, że ​​cała strona staje się biała (widocznie wyciek pamięci ewidentnie) w przypadkach, gdy wartość jest obiektem (który sprawia, że ​​zrzut jest bezużyteczny, ponieważ wtedy zwykle potrzebuję wysypisko). –

Powiązane problemy