Symfony2:ラジオウィジェットがラベルのレンダリングを防ぐ
-
25-10-2019 - |
質問
Symfony2のTwigを使用してフォームレイアウトをカスタマイズしようとしています。私はこのように見えるラジオ入力をレンダリングすることを目指しています...
<label class=" required">Label name</label>
<span class="form-radio">
<input type="radio" name="album_has_subalbums_1" /> Yes
</span>
<span class="form-radio">
<input type="radio" name="album_has_subalbums_0" /> No
</span>
私はオーバーライドしました radio_widget
次のように、カスタムフォームのテーマでブロックします
{% block radio_widget %}
{% spaceless %}
<span class='form-radio'>
<input type="radio" {{ block('widget_attributes') }}{% if value is defined %} value="{{ value }}"{% endif %}{% if checked %} checked="checked"{% endif %} />
</span>
{% endspaceless %}
{% endblock radio_widget %}
ただし、これは次のマークアップをレンダリングします。
<label class=" required">Label name</label>
<span class="form-radio">
<input type="radio" id="album_has_subalbums_1" name="album[has_subalbums]" required="required" value="1">
</span>
<label for="album_has_subalbums_1" class=" required">Yes</label>
<span class="form-radio">
<input type="radio" id="album_has_subalbums_0" name="album[has_subalbums]" required="required" value="0">
</span>
<label for="album_has_subalbums_0" class=" required">No</label>
基本的に、各ラジオ入力要素について、その値が「はい」なのか、No。私は既存のデザインで作業しているかどうかを識別するためのラベルを作成するので、HTMLマークアップを簡単に調整できません。
ラジオ入力が選択テキストをラベルとして生成するのを防ぐにはどうすればよいですか?私はそれが電話をかけることを知っています field_label
内部的にブロックしますが、あなたが私を見ることができるように radio_widget
それを参照していないので、私はこの行動を防ぐ方法について少し迷っています。
編集:
明確にするために、私は最初の例と同じ種類の構造を望んでいます...私は名前と価値の属性などを除外しましたが、それは明らかにデモンストレーションのためだけです。
解決
オーバーライドするために必要なのはそうではありません radio_widget
ブロック、しかし choice_widget
1:
{% block choice_widget %}
{% spaceless %}
{% if expanded %}
<div {{ block('widget_container_attributes') }}>
{% for child in form %}
{{ form_widget(child) }}
{{ child.get('label') | trans }} {# <- this is what you need #}
{# leave the rest untouched #}
そして、この変更が有効になるためにキャッシュをクリアすることを忘れないでください。
所属していません StackOverflow