Silex - Symfony Froms - 如何将每个单选按钮及其标签包装为选择列表中每个无线电的单独div?

时间:2016-03-12 12:36:40

标签: twig symfony-forms silex

我正在使用Symfony表格的Silex微框架。在twig模板中,我使用以下方法生成此字段:

...
{{ form_widget(form.transport_selection) }}
... 

如何覆盖这个symfony twig form templet,为Silex中的每一组(输入字段和标签)生成包裹。

这是我的树枝注册:

use Silex\Provider\FormServiceProvider;
use Symfony\Component\Translation\Loader\YamlFileLoader;
use Symfony\Component\Validator\Constraints as Assert;

$app->register(new Silex\Provider\TwigServiceProvider(), array(
    'twig.path' => [
        __DIR__.'/App/View',
    ]
)); 

如何用每个无线电选择包装单选按钮和标签?

输出

<div id="form_transport_selection">
  <input type="radio" id="form_transport_selection_0" name="form[transport_selection]" required="required" value="country" checked="checked">
  <label for="form_transport_selection_0" class="required">country</label>
  <input type="radio" id="form_transport_selection_1" name="form[transport_selection]" required="required" value="abroad">
  <label for="form_transport_selection_1" class="required">abroad</label>
</div>

预期输出:

<div id="form_transport_selection">
  <div class="radio1">
    <input type="radio" id="form_transport_selection_0" name="form[transport_selection]" required="required" value="country" checked="checked">
    <label for="form_transport_selection_0" class="required">country</label>
  </div>
  <div class="radio2">
    <input type="radio" id="form_transport_selection_1" name="form[transport_selection]" required="required" value="abroad">
    <label for="form_transport_selection_1" class="required">abroad</label>
  </div>
</div>

由于

2 个答案:

答案 0 :(得分:1)

您可以为此表单创建新模板并重新定义单选按钮视图

my.form.twig

SSMS->Server->Properties->Connections

并在控制器模板中使用它,其中显示了表单

{
  "id": 9595511812,
  "Feeds": [
    {
      "department": "mseb",
      "consumer_number": 1234567890,
      "due_date": "2016-11-11",
      "due_amount": 400,
      "balance_amount": 0,
      "unitsConsumed": 40,
      "freezeDate": "2016-11-11",
      "lastPaidDate": "2016-11-11",
      "billNumber": "9877",
      "id": "1",
      "paid": false
    },
    {
      "department": "mseb",
      "consumer_number": 1234567890,
      "due_date": "2016-11-21",
      "due_amount": 400,
      "balance_amount": 0,
      "unitsConsumed": 40,
      "freezeDate": "2016-11-21",
      "lastPaidDate": "2016-11-21",
      "billNumber": "9877",
      **"id": "2",**
      "paid": false
    }
  ]
}

答案 1 :(得分:1)

扩展MaxP的答案。确保只修改单选按钮,你不希望在复选框中使用它!我为复选框添加了一个不同的类。请注意if / else执行此操作。

{% extends "form_div_layout.html.twig" %}

{% block choice_widget_expanded %}
<div {{ block('widget_container_attributes') }}>
    {% set i=1 %}
    {% for child in form %}
        {% if form.vars.multiple == false %}
        <div class="radio-{{i}}">
        {% elseif form.vars.multiple == true %}
        <div class="checkbox-{{i}}">
        {% endif %}
            {{ form_widget(child) }}
            {{ form_label(child, null, {translation_domain: choice_translation_domain}) }}
        </div>
        {% set i=i+1 %}
        {% endfor %}
    </div>
{% endblock choice_widget_expanded %}

并在控制器模板中使用它,其中显示了表单

{% form_theme form 'my.form.twig' %}
....
{{ form_widget(form.transport_selection) }}

使用Symfony时,我建议覆盖app / Resources / views / Form / fields.html.twig中的所有Twig字段

然后在config.yml上你只需将它添加到twig的配置中就可以使用

  twig:
      form_themes:
        - 'Form/fields.html.twig'