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

Как вы скрываете метки в классе формы в symfony2?

Я знаю, что вы можете разделить форму на ветке и выбрать, чтобы не отображать метку для определенного поля, но я не могу не думать, что вы должны быть в состоянии сделать это из класса формы. Клавиша "метка" в массиве параметров позволяет вам изменить это значение так, как вам нравится, но передача либо ложной, либо пустой строки возвращает имя поля (см. Примеры ниже, где "роли" отображаются как метка).

$builder
            ->add('roles', 'entity', array(
                'class' => 'Acme\UserBundle\Entity\Role',
                'label' => '' 
            ));

$builder
            ->add('roles', 'entity', array(
                'class' => 'Acme\UserBundle\Entity\Role',
                'label' => false 
            ));

Странно, что прохождение пустого пространства (которое кажется очень грязным), кажется, создает абсолютно пустую метку, без пространства даже при просмотре источника. Может ли кто-нибудь пролить свет на лучший подход или даже на то, почему кажется, что пустое пространство работает?

4b9b3361

Ответ 1

С Symfony 2.2 вы можете избежать рендеринга <label>, используя значение false для атрибута label:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('Name', null, array('label' => false))
    ;
}

Source

Ответ 2

Сохраняйте свои спецификации "Вид" отдельно от "Модели"

Если вы выполните принятый ответ, в котором говорится:

$builder
        ->add('Name', null, array('label' => false))
    ;

Ваша форма не может быть повторно использована. Особенно, если ваша форма отображается в нескольких местах (или может быть в будущем).

Если вы не хотите отображать метку формы, лучше всего сделать это в Twig (если вы используете Twig).

вместо рендеринга {{ form_row(form.name) }}, разделите каждый элемент отдельно и исключите form_label

ех.

{{ form_errors(form.name) }}
 {# {{ form_label(form.name) }} <-- just dont include this #} 
{{ form_widget(form.name) }}

Если по дороге вам нужна метка в одном экземпляре формы, но не в другом, достаточно просто добавить {{ form_label(form.name) }}; Там, где изменение array('label' => true) включало бы ярлык везде

Если вы отформатируете свою форму с помощью одного лайнера {{ form(form) }}, вы должны взглянуть на symfony docs

Ответ 3

Чтобы скрыть мой ярлык, мне пришлось отображать только виджет для поля, а не метку, например

{{ form_widget(edit_form.event) }}
{{ form_rest(edit_form) }}

Проблема с меткой '' с пробелом в том, что она по-прежнему отображает вход html, который присутствует и влияет на страницу.

Ответ 4

Я не очень хорошо понимаю ваш вопрос, но в форме, чтобы показать имя метки, personnaly мне нравится:

  $builder
        ->add('role', 'text')

в моей ветке:

    <tr>
        <td>{{ form_widget(form.role) }} </td>
        <td>{{ form_label(form.role, "Name of Label") }}</td>
    </tr>
    <tr>
        <td>{{ form_errors(form.role) }}</td>
    </tr>

Ответ 5

это должно работать (хотя это не очень чистое решение)

$builder
        ->add('roles', 'entity', array(
            'class' => 'Acme\UserBundle\Entity\Role',
            'label' => ' ' 
        ));

(обратите внимание на пробел между тиками)

Ответ 6

Просто добавьте {'label': false} в форму form_row()

{{ form_row(form.name, {'label':false}) }}