2012-02-28 3 views
9

Я хочу получить все переменные, доступные в файле темы формы Symfony form_div_layout.html.twig, я прочитал официальный документ Symfony и обыскал в Интернете, но не смог найти полезной информации об этом, может кто-нибудь мне помочь?Есть ли полный список переменных, которые можно использовать в form_div_layout.html.twig?

+0

... извините вы нашли мой ответ полезен? – coma

+0

Я тоже потратил столько времени на это. –

ответ

1

Вы можете вытащить все из них из исходного файла, и только overload те, что вам нужно:

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

На самом деле проблема заключается в том, что у меня есть форма с коллекцией, я хочу, чтобы виджеты в коллекции использовали другую тему, отличную от родительской формы, я потерял рассудок о том, как ее архивировать. – imikay

+0

Я попытался создать пользовательскую тему для настраиваемого поля, но ссылки виджетов друг с другом, я попытался следовать цепочке, чтобы переопределить каждую, но я потерялся. – imikay

+0

вы можете вставить то, что у вас есть до сих пор, и не вижу, могу ли я помочь вам с этим. – chasen

7

я ударил с такой же проблемой в последнее время, является отсутствие документации о доступных переменных (атрибуты) при работе с темами. В конце концов, я нашел свое решение, выполнив поиск в папке поставщика (потребовалось некоторое время) для переменных, которые я знал, чтобы узнать, что еще доступно.

Лучшее место для меня было посмотреть здесь: Symfony \ Component \ Form \ Extension \ Основные \ Тип

Базовый тип, будучи FieldType предоставляет эти переменные с помощью 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) 
    ; 

прототип атрибут, который существует только в типе коллекции, как allow_add и allow_delete, см. в CollectionType в той же папке.

После базового типа FieldType это полный список.

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

Спасибо, я попробую и посмотрю, как я могу их использовать. – imikay

+0

В 'collectionType', как мы можем перебирать каждое поле ввода, включенное в коллекцию?И знаете ли вы, как обращаться к родительским элементам или частям всей формы? [См. Этот вопрос] (http://stackoverflow.com/questions/26184990/set-the-input-labels-for-each-field-as-headers-in-symfony-collection-widget) –

16

Ну, вы можете получить все доступные переменные в каждом блоке итерируя контекст:

{% 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 %} 

И если вы хотите использовать ваш, то вы должны переписать классы, которые на самом деле рендерите эти виджеты, просто посмотрите на AbtractType :: buildView ...

Как предложено @Gregoire, вы можете использовать {{ dump(_context) }} от версии 1.5 (http://twig.sensiolabs.org/doc/functions/dump.html), но имейте в виду, что он будет печатать большой объем информации.

+1

Вы также можете добавить '{{dump (value)}}' в цикле, чтобы отобразить содержимое переменных. – Gregoire

+0

О, боже, спасибо вам большое. –

+0

@Gregoire In Symfony 2.5 '{{dump (value)}}' делает всю страницу белой (известная утечка памяти очевидно) в тех случаях, когда это значение является объектом (что делает дамп бесполезным, так как это, когда мне обычно требуется свалка). –

1

Смотрите мой ответ здесь: https://stackoverflow.com/a/41020474/5758328

Вам просто нужно использовать

{% dump %} 

и все переменные, доступные в шаблоне, будут сброшены в профилировщика

 Смежные вопросы

  • Нет связанных вопросов^_^