Как вы скрываете метки в классе формы в symfony2?
Я знаю, что вы можете разделить форму на ветке и выбрать, чтобы не отображать метку для определенного поля, но я не могу не думать, что вы должны быть в состоянии сделать это из класса формы. Клавиша "метка" в массиве параметров позволяет вам изменить это значение так, как вам нравится, но передача либо ложной, либо пустой строки возвращает имя поля (см. Примеры ниже, где "роли" отображаются как метка).
$builder
->add('roles', 'entity', array(
'class' => 'Acme\UserBundle\Entity\Role',
'label' => ''
));
$builder
->add('roles', 'entity', array(
'class' => 'Acme\UserBundle\Entity\Role',
'label' => false
));
Странно, что прохождение пустого пространства (которое кажется очень грязным), кажется, создает абсолютно пустую метку, без пространства даже при просмотре источника. Может ли кто-нибудь пролить свет на лучший подход или даже на то, почему кажется, что пустое пространство работает?
Ответы
Ответ 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}) }}