Подтвердить что ты не робот

Symfony2 Form Builder - удалить ярлык, сделать его заполнитель

Я играю с создателем форм Symfony, и я не могу найти способ не отображать ярлык. Кроме того, меня интересует фактическое установление заполнителя для каждого окна ввода. Это возможно? Я немного исследовал и ничего не нашел.

Моя форма:

<form action="{{ path('searchPeople') }}" method="post" class="form-inline">
    {{ form_errors(form) }}

    {{ form_row(form.first_name) }}
    {{ form_row(form.last_name) }}

    {{ form_rest(form) }}

    <br />
    <button type="submit" class="btn btn-primary" /><i class="icon-search"></i>Search</button>
</form>

EDIT: решено! Все нижеприведенные решения помогли, но я дал ответ на основной полезный комментарий. Я ценю всю помощь. Для всех, кто сталкивается с этим, это мой последний рабочий код:

<form action="{{ path('searchPeople') }}" method="post" class="form-inline">
    {{ form_errors(form) }}

    {{ form_errors(form.first_name) }}
    {{ form_widget(form.first_name, {'attr': {'placeholder': 'First Name'} }) }}

    {{ form_errors(form.last_name) }}
    {{ form_widget(form.last_name, {'attr': {'placeholder': 'Last Name'} }) }}

    {{ form_rest(form) }}

    <br />
    <button type="submit" class="btn btn-primary" /><i class="icon-search icon-white"></i>Search</button>
</form>
4b9b3361

Ответ 1

Если вы выведете поле с помощью form_rest, вам нужно установить метку для поля в false в построителе форм с чем-то вроде

$builder->add('first_name', 'text', array(
    'label' => false,
));

Если вы выставляете поля отдельно, вы можете опустить форму_файла для этого поля в шаблоне ветки или установить ее в пустую строку.

{{ form_label(form.first_name, '') }}

Ответ 2

Я знаю, что он уже ответил, но может помочь кому-то, кто ищет другое решение для заполнителей, если вы не хотите ничего менять в своем шаблоне ветки:

$builder->add(
    'name',
    'text', 
     array(
        'attr' => array(
             'placeholder' => 'Your name',
        ),
        'label' => false,
     )
);

Ответ 3

Преобразование метки в местозаполнитель

{% use 'form_div_layout.html.twig' with widget_attributes as base_widget_attributes %}
{% block widget_attributes %}
    {% set attr = {'placeholder': label|trans({}, translation_domain)} %}
    {{- block('base_widget_attributes') -}}
{% endblock widget_attributes %}

Ответ 4

Я сделал это недавно!:) Вы хотите создать новый шаблон полей, для form_row и один для form_widget. Затем удалите часть form_label и добавьте ваш placeholder.

http://symfony.com/doc/current/cookbook/form/form_customization.html

Вы можете сделать это для каждого поля или установить его для всех.

Или вы также можете пропустить удаление form_label из шаблона form_row и просто сделать form_widget(), в котором вы сейчас вызываете form_row()

Ответ 5

для других, которые сталкиваются с этим вопросом-лейблом: вы можете использовать тему формы, чтобы переопределить тег form_row для каждой формы. Однако я рекомендую просто установить его невидимым для оптимизации чтения страниц. мой пример с загрузкой:

{% block form_row %}
    {% spaceless %}
            {{ form_label(form, null, {'label_attr': {'class': 'sr-only'}}) }}
            {{ form_errors(form) }}
            {{ form_widget(form) }}
    {% endspaceless %}
{% endblock form_row %}

не забудьте включить вашу форму в config.yml и шаблон.

Ответ 6

Расширение ответа Léo:

{% use 'form_div_layout.html.twig' %}
{% block widget_attributes %}
{% spaceless %}
    {% set attr = attr|merge({'placeholder': label}) %}
    {{ parent() }}
{% endspaceless %}
{% endblock widget_attributes %}

trans фильтр удален, потому что он включен в родительский.

Ответ 7

Symfony 2.8 и выше

  • Удалить form_label

    {% block form_row %}
    <div>
        {{ form_errors(form) }}
        {{ form_widget(form) }}
    </div>
    {% endblock form_row %}
    
  • Добавить атрибут заполнителя

    {% block form_widget_simple %}
        {% set type = type|default('text') %}
        <input placeholder="{{ translation_domain is same as(false) ? label : label|trans({}, translation_domain) }}" type="{{ type }}" {{ block('widget_attributes') }} {% if value is not empty %}value="{{ value }}" {% endif %}/>
    {% endblock form_widget_simple %}
    

Ответ 8

Вы должны отобразить форму вручную.

Вот пример:

<form id="form-message" action="{{ path('home') }}" method="post" {{ form_enctype(form) }}>
  {{ form_label(form.name) }}
  {% if form_errors(form.name) %}
    <div class="alert alert-error">
      {{ form_errors(form.name) }}
    </div>
  {% endif %}
  {{ form_widget(form.name) }}
  {{ form_row(form._token) }}
  <input type="submit" class="btn" value="Submit">
</form>

Связанная документация

Ответ 9

Для тех, кто НЕ использует form_row, вы всегда можете добавить placeholder как атрибут непосредственно при добавлении ввода в конструктор. Например:

$task = new Task();
$form = $this->createFormBuilder($task)
            ->add('first_name', 'text', array(
                      'required' => true,
                      'trim' => true,
                      'attr' => array('placeholder' => 'Lorem Ipsum')
        )->getForm();

Ответ 10

Подводя итог:

  • Ответ Titi является самым простым:

  • Мик, Léo и Quolonel наиболее эффективны, но являются неполными (для symfony > 2.6):

Если вы используете параметр label_format в своем *Type::configureOptions, их решение не работает. Вам нужно добавить содержимое блока form_label для обработки всех возможностей ярлыков. Полный и наиболее эффективный ответ (используемый код w/symfony 3.3):

  • Удалить form_label

    {% block form_row %}
    <div>
        {{ form_errors(form) }}
        {{ form_widget(form) }}
    </div>
    {% endblock form_row %}
    
  • Отредактируйте блок widget_attribute

    {% block widget_attributes %}
        {% spaceless %}
            {% if label is not same as(false) -%}
                {% 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 -%}
    
                {% set attr = attr|merge({'placeholder': label}) %}
            {%- endif -%}
    
            {{ parent() }}
        {% endspaceless %}
    {% endblock widget_attributes %}
    

Примечания:

  • Не переводите метки в блок widget_attributes, иначе они будут отображаться как отсутствующие переводы.

  • Решение не работает для флажков или переключателей, вам нужно добавить что-то вроде:

    {%- block checkbox_widget -%}
        {{ parent() }}
        {{- form_label(form) -}}
    {%- endblock checkbox_widget -%}