自定义Bootstrap变量在Symfony 2 Twig表单小部件



在Symfony 2中,我试图创建一个Twig表单模板来显示类似bootstrap的表单小部件。多亏了这篇文章,我有了一个良好的开端。像下面这样简单的小部件可以工作。

…
{% block form_widget_simple %}
{% spaceless %}
    {% set type = type|default('text') %}
    <input class="form-control" type="{{ type }}" {{ block('widget_attributes') }} {% if value is not empty %}value="{{ value }}" {% endif %}/>
{% endspaceless %}
{% endblock form_widget_simple %}
…

用下面的代码调用这个块:

{{ form_row(aanmeld_form.username, {'attr': {'placeholder': 'Gebruikersnaam'}, 'label': 'Gebruikersnaam', 'label_attr': {'class': 'sr-only'}}) }}

现在我想建立在这些简单的小部件,以满足Bootstrap 3的输入组。

我知道有很多包可以将Bootstrap 3集成到Symfony 2中,比如MopaBootstrapBundle和BraincraftedBoostrapBundle。愿意保持我的代码尽可能苗条,我希望能够得到相同的结果,只修改Twig表单小部件。

我们的想法是在调用小部件时合并一个额外的变量,像这样。

{{ form_row(aanmeld_form.username, {'input_group': { 'prepend': '@' }, 'attr': {'placeholder': 'Gebruikersnaam'}, 'label': 'Gebruikersnaam', 'label_attr': {'class': 'sr-only'}}) }}

然而,当我尝试对这个'input_group'变量做一些事情时,Symfony不知道这个变量。

{% block form_widget_simple %}
{{ input_group }}
{% spaceless %}
    {% set type = type|default('text') %}
    <input class="form-control" type="{{ type }}" {{ block('widget_attributes') }} {% if value is not empty %}value="{{ value }}" {% endif %}/>
    {% endspaceless %}
{% endblock form_widget_simple %}

这段代码导致这个错误。Variable "input_group" does not exist.

是否有可能在调用Twig表单小部件时存储额外的变量?我忘了什么吗?

你不能给一个元素添加一个没有为该元素定义的选项。您可以考虑创建自己的自定义表单字段。这个示例展示了如何创建包含子表单字段的下拉列表。您将需要类似的东西,但更改它,以便将子元素包装在输入组div中。对于其他信息,您可以检查现有的表单类型并从中提取所需的代码。

最新更新