是否有完整的变量列表可以在form_div_layout.html.twig中使用?

时间:2012-02-28 16:15:28

标签: symfony twig

我想获取Symfony表单主题文件form_div_layout.html.twig中的所有可用变量,我阅读了Symfony官方文档并在网上搜索,但找不到任何有用的信息,有人可以帮我吗?

4 个答案:

答案 0 :(得分: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建议的那样,您可以使用版本1.5(http://twig.sensiolabs.org/doc/functions/dump.html)中的{{ dump(_context) }},但请注意它会打印大量信息。

答案 1 :(得分:7)

我最近遇到了同样的问题,因为在主题中工作时缺乏可用变量(属性)的文档。最后,我通过搜索供应商文件夹(花了一段时间)查找我知道的变量,找到了我的解决方案,看看还有什么可用。

对我来说最好的地方是在这里查看: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 :(得分:2)

请在此处查看我的回答:https://stackoverflow.com/a/41020474/5758328

您只需要使用

{% dump %}

并且模板中可用的所有变量都将转储到探查器

答案 3 :(得分:1)

您可以从原始文件中提取所有内容,并且只需overload您需要的文件:

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