如何以 Symfony 形式制作 RadioButton?
How to make RadioButton in Symfony Form?
我有一个表格,我必须用 Symfony 表格重做,但我停留在这个地方:
<div class="currency-label">
<input checked id="cur1" name="currency" type="radio">
<label for="cur1">EURO</label>
</div>
<div class="currency-label active">
<input id="cur2" name="currency" type="radio">
<label for="cur2">USD</label>
</div>
这是它的样子:
如何使用 Symfony Forms 制作单选按钮?
在我的表格 class 中,我添加了:
->add('vacancyCurrency', RadioType::class, ['required' => false])
和我的模板
{{ form_widget(form.vacancyCurrency) }}
我的表格变短了,显然没有了 css :
如果我添加 css class 以形成它看起来不同:
{{ form_widget(form.vacancyCurrency, {'attr':
{'class': 'currency-label'}
}) }}
最好的方法是将 ChoiceType
呈现为单选按钮:
->add(
'vacancyCurrency',
ChoiceType::class,
[
'choices' => [
'US Dolar' => 'usd',
'Euro' => 'eur',
],
'expanded' => true
]
);
当您有选项 multiple = false
和 expanded = true
时,它呈现为单选按钮的 ChoiceType 字段。选项 multiple
没有出现在上面的代码中,因为它的默认值为 false
。您可以找到更多详细信息 here
编辑:
在你的树枝模板中,你只需要添加:
{{ form_widget(form.vacancyCurrency) }}
编辑 2
你在这个答案的评论中说你需要将每个单选按钮放在 <div class="currency-label active">
中。我相信您不能通过在 Symfony 表单字段本身中设置属性来做到这一点。你在那里的选项,比如 choice_attr
在 input
中运行,而不是在它周围的 div 中运行。
可以实现您想要的效果,但您需要编写一些代码并手动呈现单选按钮,例如:
<div class="form-group">
<label class="control-label required">Vacancy currency</label>
{% for child in form.vacancyCurrency %}
<div class="currency-label active">
<label for="{{ child.vars.id }}" class="required">
<input type="radio" id="{{ child.vars.id }}" name="{{ form.vars.id ~ '[' ~ form.vacancyCurrency.vars.name ~ ']' }}" required="required" class="checkbox" value="{{ child.vars.label }}">
{{ child.vars.label }}
</label>
</div>
{% endfor %}
</div>
当然,您可以使用一些 Javascript 来完成这项工作。例如,您可以像这样呈现表单字段:
{{ form_widget(form.vacancyCurrency) }}
它将在 div 和 class="radio"
内添加每个单选按钮。
然后您可以在页面准备好后立即将 class 更改为您想要的 JQuery:
$(document).ready(function() {
$(".radio").attr("class", "currency-label active");
});
这就是我在模板中解决这个问题的方法:
{{ form_start(form) }}
{% form_theme form _self %}
{% block choice_widget %}
{% for child in form.vacancyCurrency %}
<div class="currency-label">
{{- form_widget(child) -}}
{{- form_label(child, null) -}}
</div>
{% endfor %}
{% endblock choice_widget %}
{{ form_end(form) }}
格式为class:
->add('vacancyCurrency', ChoiceType::class, [
'choices' => [
'USD' => 'USD',
'RUB' => 'RUB',
],
'expanded' => true,
])
为了激活其中之一,我在模型中设置了默认数据:
public $vacancyCurrency = 'RUB';
Update
现在我有了货币界面并以 class:
的形式使用它
->add('currency', ChoiceType::class, [
'label' => 'Валюта',
'choices' => \array_combine(CurrencyInterface::ALL, CurrencyInterface::ALL)
])
我有一个表格,我必须用 Symfony 表格重做,但我停留在这个地方:
<div class="currency-label">
<input checked id="cur1" name="currency" type="radio">
<label for="cur1">EURO</label>
</div>
<div class="currency-label active">
<input id="cur2" name="currency" type="radio">
<label for="cur2">USD</label>
</div>
这是它的样子:
如何使用 Symfony Forms 制作单选按钮? 在我的表格 class 中,我添加了:
->add('vacancyCurrency', RadioType::class, ['required' => false])
和我的模板
{{ form_widget(form.vacancyCurrency) }}
我的表格变短了,显然没有了 css :
{{ form_widget(form.vacancyCurrency, {'attr':
{'class': 'currency-label'}
}) }}
最好的方法是将 ChoiceType
呈现为单选按钮:
->add(
'vacancyCurrency',
ChoiceType::class,
[
'choices' => [
'US Dolar' => 'usd',
'Euro' => 'eur',
],
'expanded' => true
]
);
当您有选项 multiple = false
和 expanded = true
时,它呈现为单选按钮的 ChoiceType 字段。选项 multiple
没有出现在上面的代码中,因为它的默认值为 false
。您可以找到更多详细信息 here
编辑:
在你的树枝模板中,你只需要添加:
{{ form_widget(form.vacancyCurrency) }}
编辑 2
你在这个答案的评论中说你需要将每个单选按钮放在 <div class="currency-label active">
中。我相信您不能通过在 Symfony 表单字段本身中设置属性来做到这一点。你在那里的选项,比如 choice_attr
在 input
中运行,而不是在它周围的 div 中运行。
可以实现您想要的效果,但您需要编写一些代码并手动呈现单选按钮,例如:
<div class="form-group">
<label class="control-label required">Vacancy currency</label>
{% for child in form.vacancyCurrency %}
<div class="currency-label active">
<label for="{{ child.vars.id }}" class="required">
<input type="radio" id="{{ child.vars.id }}" name="{{ form.vars.id ~ '[' ~ form.vacancyCurrency.vars.name ~ ']' }}" required="required" class="checkbox" value="{{ child.vars.label }}">
{{ child.vars.label }}
</label>
</div>
{% endfor %}
</div>
当然,您可以使用一些 Javascript 来完成这项工作。例如,您可以像这样呈现表单字段:
{{ form_widget(form.vacancyCurrency) }}
它将在 div 和 class="radio"
内添加每个单选按钮。
然后您可以在页面准备好后立即将 class 更改为您想要的 JQuery:
$(document).ready(function() {
$(".radio").attr("class", "currency-label active");
});
这就是我在模板中解决这个问题的方法:
{{ form_start(form) }}
{% form_theme form _self %}
{% block choice_widget %}
{% for child in form.vacancyCurrency %}
<div class="currency-label">
{{- form_widget(child) -}}
{{- form_label(child, null) -}}
</div>
{% endfor %}
{% endblock choice_widget %}
{{ form_end(form) }}
格式为class:
->add('vacancyCurrency', ChoiceType::class, [
'choices' => [
'USD' => 'USD',
'RUB' => 'RUB',
],
'expanded' => true,
])
为了激活其中之一,我在模型中设置了默认数据:
public $vacancyCurrency = 'RUB';
Update
现在我有了货币界面并以 class:
的形式使用它->add('currency', ChoiceType::class, [
'label' => 'Валюта',
'choices' => \array_combine(CurrencyInterface::ALL, CurrencyInterface::ALL)
])