【问题标题】:Twig: remove div around each checkbox fields of a formTwig:删除表单的每个复选框字段周围的 div
【发布时间】:2016-08-03 00:35:59
【问题描述】:

编辑:查看我在问题末尾找到的解决方案 ;-)

我从几个小时以来一直在寻找解决方案,但我并没有真正找到我喜欢的东西。我相信这很容易做到。

我正在使用 Symfony 3.1 构建一个表单。我的表单没有在数据库中发送任何内容。一切似乎都还好。但是在渲染我的树枝模板时,我的所有复选框都被<div> html 标记包围。

我只是想让 Twig 给我一个没有 <div> 标签的表单。 编辑:这是 Twig 呈现给我的:这对我来说没问题,但我想删除 div 标签

<form name="form" method="post">
<div id="form"><div><label for="form_1">1</label><input type="checkbox" id="form_1" name="form[1]" class="ballsCheckBox" value="1" /></div>
</form>

这是我的树枝模板:

{% extends "::base.html.twig" %}

{% block title %}SimulotoBundle:Lotto:lotto{% endblock %}

{% block body %}
<h1>Welcome to the Lotto:result page</h1>
{{form(form)}}

{% endblock %}

我直接在控制器中构建表单。看见: 公共函数 LottoSimulationFormAction()

   {
        $lt = new LottoSimulation();

        $data = [];

        $formBuilder = $this->createFormBuilder($data);

        /** building Lotto grid with checkboxes * */
        for ($i = 1; $i <= $lt->getMaxNb(); $i++)
        {
            $formBuilder->add($i, CheckboxType::class, [
                'label' => $i,
                'required' => false,
                'attr' => [
                    'class' => 'ballsCheckBox'
                ]
            ]);
        }

        /** adding submit button **/
        $formBuilder->add('Envoyer', SubmitType::class, [
            'attr' => [
                'class' => 'save'
                ]
            ]);

        $form = $formBuilder->getForm();

        return $this->render("SimulotoBundle:Lotto:lotto.html.twig", [
            "form" => $form->createview()
                ]);
    }
}

【问题讨论】:

  • 你应该把你的解决方案变成一个答案并自我接受它
  • 完成了。我已经创建了一个答案。谢谢

标签: twig symfony


【解决方案1】:

这是解决此问题的解决方案。

我需要自定义表单呈现,正如本页上的 Synfony 食谱中所述 http://symfony.com/doc/current/form/form_customization.html

转到 vendor\Symfony\Bridge\Twig\Ressources\views\Form\form_div_layout.html 并修改块:

{%- block form_row -%}
    <div>
        {{- form_label(form) -}}
        {{- form_errors(form) -}}
        {{- form_widget(form) -}}
    </div>
{%- endblock form_row -%}

您可以删除它,但更好的方法是将该块复制/粘贴到您的模板并覆盖它。像这样:

{% extends "::base.html.twig" %}

{% form_theme form _self %} //don't forget this line of code

{%- block form_row -%}
        {{- form_label(form) -}}
        {{- form_errors(form) -}}
        {{- form_widget(form) -}}
{%- endblock form_row -%}

【讨论】: