如何将我所需字段的星号放在我的标签上? (Symfony形式)

时间:2017-08-18 15:14:03

标签: forms symfony required form-fields

我正在研究Symfony 3,我的表格有些问题。

当我创建一个不需要字段的Symfony表单时,这是我的代码:

我创建表单:

$form = $this->createFormBuilder()
  ->add('prenom' TextType::class, array(
    'label'    => 'Votre prénom',
    'required' => false
  )
  ->getForm();

以下是此字段的视图中的代码:

{{ form_label(form.prenom) }}
{{ form_errors(form.prenom) }}
{{ form_widget(form.prenom) }}

这是我的HTML:

<label class="control-label" for="contact_prenom">Votre prénom</label>
<input type="text" id="contact_prenom" name="contact[prenom]" class="form-control"/>

现在,如果我在 FormBuilder 上没有'require' => false的情况下执行相同的操作,那么这就是我得到的HTML:

<label class="control-label required" for="contact_prenom">Votre prénom</label>
<sup class="required" title="Champ obligatoire">
        <i class="fa fa-asterisk"></i>
</sup>
<input type="text" id="contact_prenom" name="contact[prenom]" required="required" class="form-control" />

是否可以控制“sup”标记,以便星号*可以与我的标签一起使用?

我想我可以用jQuery来做,但是我想知道是否可以在我的表单构建器或Twig中进行?

3 个答案:

答案 0 :(得分:5)

在文档中,这里有一个特定的部分http://symfony.com/doc/current/form/form_customization.html#adding-a-required-asterisk-to-field-labels

你甚至可以只使用CSS

label.required:before {
    content: "* ";
}

答案 1 :(得分:0)

是的,您可以覆盖twig模板或symfony用于渲染窗口小部件的块,请查看: http://symfony.com/doc/current/templating/overriding.html

在您的情况下,您正在寻找

  

供应商/ symfony的/ symfony的/ SRC / Symfony的/网桥/枝条/资源/视图/窗体/ form_div_layout.html.twig

这就是你要覆盖的块:

{%- block form_label -%}
    {% if label is not same as(false) -%}
        {% if not compound -%}
            {% set label_attr = label_attr|merge({'for': id}) %}
        {%- endif -%}
        {% if required -%}
            {% set label_attr = label_attr|merge({'class': (label_attr.class|default('') ~ ' required')|trim}) %}
        {%- endif -%}
        {% if label is empty -%}
            {%- if label_format is not empty -%}
                {% set label = label_format|replace({
                    '%name%': name,
                    '%id%': id,
                }) %}
            {%- else -%}
                {% set label = name|humanize %}
            {%- endif -%}
        {%- endif -%}
        <label{% if label_attr %}{% with { attr: label_attr } %}{{ block('attributes') }}{% endwith %}{% endif %}>{{ translation_domain is same as(false) ? label : label|trans({}, translation_domain) }}</label>
    {%- endif -%}
{%- endblock form_label -%}

答案 2 :(得分:0)

从 Symfony 5.1 开始,您可以执行以下操作

->add('name', TextType::class, [
    'label' => 'Name <span class="badge badge-danger badge-pill">Required</span>',
    'label_html' => true
])

label_html (bool) 属性将允许将 HTML 直接注入标签并呈现在表单输出上。

文档 - https://symfony.com/doc/current/reference/forms/types/form.html#label-html