3

デフォルトのラジオ ウィジェットは、次の構造を作成します。

<label>...</label>
<div id="...">
<div class="clearfix prettyradio labelright  blue">
<input type="radio" id="..._0" name="..." value="..." style="display: none;">
<a href="#" class=""></a>
...
</div>

radio_widget ブロックを見つけましたが、そこには入力自体しか含まれていません。したがって、この部分のみをカスタマイズできます。

<input type="radio" id="..._0" name="..." value="1" style="display: none;">

しかし、ラジオ選択フィールドの構造全体を変更する方法がわかりませんか?

また、symfony が入力に display:none を追加する理由を知っている人はいますか?

ありがとう。

4

2 に答える 2

8

Radio Field Typeを使用している場合は、を呼び出しinputてブロックの一部のみをカスタマイズできます。表示されるのは、radio_widgetform_widget(form.yourField)

{% block radio_widget %}
{% spaceless %}
    <input type="radio" {{ block('widget_attributes') }}{% if value is defined %} value="{{ value }}"{% endif %}{% if checked %} checked="checked"{% endif %} />
{% endspaceless %}
{% endblock radio_widget %}

ただし、Choice Field Typeを使用して Radio Fields を表示している場合(expanded => true and multiple => false)。次に、ブロックをオーバーライドする必要があります。これにより、choice_widget子要素ごとradio_widgetに、グローバルで囲まれたブロックが呼び出されますdiv

どうやって「display:none」を取得しましたか? デフォルト ブロックにはこのようなスタイルがないためです。

于 2012-12-10T19:34:01.943 に答える
1

個々のラジオ フィールドがレンダリングされる方法 (つまり、グループ内の各入力フィールドがレンダリングされる方法) を特にオーバーライドしたい場合は、ブロック名に次の式を使用します。

_<form name>_<field name>_entry_widget

このビットに注意してください:_entry

拡張された選択肢フィールド..._entry_row..._entry_label使用していて、個々の選択肢に使用されていないために機能しない場合 - 少なくともラジオ ボタンには適しています。

{{ form_widget(form) }}より一般的には、次のコードを使用して関数呼び出しの次の呼び出し中に Symfony が使用する予定のブロックについて多くを知ることができます。

{% for b in form.vars.block_prefixes %}
    {{ dump(b) }}
{% endfor %}

childまたは、いくつかの状況で見たいと思うかもしれません:

{% for b in child.vars.block_prefixes %}
    {{ dump(b) }}
{% endfor %}
于 2015-07-16T03:06:52.373 に答える