Есть ли полный список переменных, которые можно использовать в form_div_layout.html.twig? - PullRequest
9 голосов
/ 28 февраля 2012

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

Ответы [ 4 ]

16 голосов
/ 16 июля 2012

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

{% 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),, но имейте в виду, что он напечатаетбольшое количество информации.

7 голосов
/ 29 февраля 2012

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

Лучшим местом для меня было заглянуть сюда: Symfony \ Component \ Form \ Extension \ Core \ Type

Базовый тип 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)
    ;

prototype - это атрибут, который существует только в типе коллекции, как и 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'])
2 голосов
/ 07 декабря 2016

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

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

{% dump %}

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

1 голос
/ 28 февраля 2012

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

vendor/symfony/src/Symfony/Bridge/Twig/Resources/views/Form/form_div_layout.html.twig
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...