2015-08-07 2 views
0

У меня есть страница symfony, где я показываю форму, и я хотел бы добавить * в метки всех полей, которые необходимы.Настройка меток форм в Symfony

Так у меня form.php.twig, который выглядит следующим образом:

{% extends "::layout.php.twig" %} 

{% block body %} 

    <div class="row"> 

    {% use 'form_div_layout.html.twig' with form_label as base_form_label %} 
    {% block form_label %} 
     {{ block('base_form_label') }} 

     {% if required %} 
      <span class="required" title="This field is required">*</span> 
     {% endif %} 
    {% endblock %} 
    </div> 

{% endblock %} 

Я последовал за точную документацию симфони поваренной книги о том, как настроить этикетки, которая является http://symfony.com/doc/current/cookbook/form/form_customization.html#cookbook-form-theming-methods.

Но я получаю эту ошибку

Variable «метка» не существует в form_div_layout.html.twig в строке 206

не имеют какой-либо переменной метки в коде my form.php.twig, поэтому я не понимаю, почему я получаю эту ошибку. И когда я удалить

{{блок ('base_form_label')}}

я

Variable "требуется" не существует в ATPlatformBundle: Session: create.php .twig

Может ли кто-нибудь помочь мне в этом? Я не вижу, где моя ошибка? Я не хочу настраивать его с помощью css, но добавлять *.

Я проверил form_div_layout.html.twig на линии 206, и это то, что есть

{%- block form_label -%} 
    {% if label is not sameas(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 sameas(false) ? label : label|trans({}, translation_domain) }}</label> 
    {%- endif -%} 
{%- endblock form_label -%} 

Спасибо заранее.

ответ

0

С Twig, вы должны проверить существование переменной перед использованием:

Variable «требуется» не существует

{% if required is defined and ... } 

Вы должны проверить это, потому что поле не является всегда требуется.

, если вы хотите получить дополнительную информацию, у вас есть эта страница документации:

http://twig.sensiolabs.org/doc/tests/defined.html

+0

Hi Sylvain, Извините, за мой последний ответ, спасибо за ваш ответ. Я попробовал это на своем собственном шаблоне form.php.twig (добавление {% if required is defined and ...}), но я все равно получаю ту же ошибку. Ошибка возникает на самом деле из form_div_layout.html.twig в строке 206. Но этот файл находится в поставщике/symfony/symfony/src/Symfony/Bridge/Twig/Resources/views/Form/ Так что я считаю, что это не является хорошей практикой для изменения содержимого файлов по умолчанию. Неужели я ошибаюсь? У вас есть идея? Благодарю. – Nadjib

3

ли вы попробовать определение метки внутри вашей формы строитель ?! Нижеследующее поле является обязательным, потому что, если вы не укажете обязательный => false, ваше поле будет отображено по мере необходимости. Что-то вроде:

->add('name', 'text', array('label' => '* name')) 
+0

Примите мой ответ и отметьте свой вопрос, если он сработает для вас. –

+0

Привет, Абдельазиз, извините за мой поздний ответ. Спасибо за ваш ответ, но на самом деле, если я это сделаю, это может сработать, но тогда мне нужно будет установить все поля моей формы с помощью массива ('label' => 'some_string'), чего я не хочу. Я хотел бы установить * автоматически на каждое поле в шаблоне form.php.twig. Я имею в виду определение правила, и это правило добавления * будет применяться ко всем ярлыкам автоматически. У вас есть идея? – Nadjib

+0

Нет, извините, я не знаю –

0

Итак, в конце концов, мне не удалось изменить метки в моей form.php.twig (который является шаблоном я использую, чтобы показать свою форму), но я использовал другой техника.

Я создал новый файл с именем fields.php.twig, который я ввел в MyBundle/Resources/views/Form.

В начале моих полей.php.веточка Затем я добавил

{% extends 'form_div_layout.html.twig' %} 

и ниже, я добавил

{% block form_label %} 
     {{ parent() }} 
     {% if required %} 
      <span> * </span> 
     {% endif %} 
{% endblock form_label %} 

Тогда в моем form.php.twig, я добавил

{% form_theme form 'MyBundle:Form:fields.php.twig' %} 
{{ form_start(form) }} 

Myform here with {{ form_label(form.property) }} 

{{ form_errors(form.property) }} 
{{ form_widget(form.property) }} 

{{ form_end(form) }} 

Он отлично работает, но у меня было для создания поля.php.twig.

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