2016-04-11 4 views
1

, когда поле формы генерируются с помощью итерации:как проверить в пруте, если поле формы имеет метку

{% for field in form %} 
{{ form_widget(field); }} 
{% endform %} 

тогда он будет инкапсулирует DIV блок окружает тип ввода данного поля, так и этикетка (если он имеет метку).

Я хочу, чтобы отделить это в ярлыке, и виджет:

 <div class="form-group">     
     {% if field.vars.label is not null %} 
      {{ form_label(field) }} 
     {% endif %} 
     {{ form_widget(field) }} 
     </div> 

но field.vars.label всегда нуль. BTW, когда я генерирую без условия, тогда он правильно показывает метки.

Как получить значение метки для проверки состояния?

Заранее спасибо.

+0

Twig использует '' name' если label' не установлен. Таким образом, ваш чек должен быть как '{%, если field.vars.label не пуст, а field.vars.name не пуст%}'. И это также похоже на то, что вы пытаетесь достичь, описано в [cookie] [http://www.symfony.com/doc/current/cookbook/form/form_customization.html). –

+0

Вы правы. Проблема в том, что все поля имеют имя. Я все еще не знаю, как form_widget решает, какие поля будут иметь метку, а какие нет. – Roland

ответ

1

изменить метку к ложной и form_label() функции веточки будет автоматически игнорирует его.

Вот фрагмент кода из файла form_div_layout.html.twig (см строка 2):

{%- 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{% for attrname, attrvalue in label_attr %} {{ attrname }}="{{ attrvalue }}"{% endfor %}>{{ translation_domain is same as(false) ? label : label|trans({}, translation_domain) }}</label> 
    {%- endif -%} 
{%- endblock form_label -%} 
+0

Это приводит меня к компромиссу :) Я бы хотел избежать изменения формообразователя, «теперь. Спасибо, я должен принять это решение – Roland

0

Согласно doc переменной форме референса,

Попробуйте с:

вместо:

{% if field.vars.label is not null %} 
+1

Метод «label» для объекта «Symfony \ Component \ Form \ FormView» не существует. То есть результат :( – Roland

+0

@Roland извините, попробуйте с 'field.attr.label' также – Matteo

+0

Метод« attr »для объекта« Symfony \ Component \ Form \ FormView »не существует в ... – Roland

Смежные вопросы