пользовательская метка текстового поля symfony2 - PullRequest
6 голосов
/ 05 апреля 2011

У меня была небольшая, но неприятная проблема с компонентом symfony2 Field. Например, я хотел бы вывести массив полей формы в шаблоне веточки:

{% for field in form %}
    {{ form_label( field ) }}: {{ form_field( field ) }}
{% endfor %}

А вот конфигурация текстового поля:

$field = new TextField( 'FieldName', array(
    'label' => 'MyCustomLabel',
) );

Но, к сожалению, когда движок отображает этот вывод, я получаю «FieldName» в качестве метки вместо «MyCustomLabel». У меня не было бы проблем, если бы я выводил поля формы не в for (в этом случае я могу просто добавить метку в шаблон для каждого поля). Но скрипт не знает определенного количества и конфигурации полей формы перед выполнением. Итак, мне нужно реализовать метод цикла для рендеринга поля. И я также хочу остаться в примечании ветки ... Я буду рад за хороший совет:)

Ответы [ 6 ]

7 голосов
/ 05 сентября 2011

Если вы хотите изменить метку, выполните следующие действия. 1) Создать класс формы. 2) add('fieldName',null,array('label' => 'My New Label:'))

пожалуйста, не меняйте fieldName, но вы можете играть с Label в массиве.

Наслаждайтесь!

4 голосов
/ 22 декабря 2015

Самый простой способ сделать это в шаблоне - передать второй аргумент form_label

<div class="form-group">
    {{ form_label(form.email, 'Email:') }} <- this row
    {{ form_widget(form.email, {'attr': {'class': 'form-control'}}) }}
</div>
3 голосов
/ 05 февраля 2013

Ответ для пользователей Symfony 2.1, которые наткнулись на это в надежде получить ответ, почти что есть ответ @rikinadhyapak.

, если вы расширили класс FormType некоторого пакета, такого как FOSUserBundle, в вашем buildFormМетод:

    $field = $builder->get('username');         // get the field
    $options = $field->getOptions();            // get the options
    $type = $field->getType()->getName();       // get the name of the type
    $options['label'] = "Login Name";           // change the label
    $builder->add('username', $type, $options); // replace the field
1 голос
/ 05 мая 2011
0 голосов
/ 11 апреля 2016

Для Symfony 2.3 вы можете заменить метку, используя следующие события:

$builder->addEventListener(FormEvents::POST_SET_DATA, function (FormEvent $event)
{
    $form = $event->getForm();
    $object = $event->getData();

    $field = $form->get('fieldname');
    $config = $field->getConfig();
    $options = $config->getOptions();
    $options['label'] = 'New label'; // change the label
    $form->add($field->getName(), $config->getType()->getName(), $options); // replace the field

});

, но я бы этого избегал.

0 голосов
/ 15 апреля 2011

Я бы честно отложил изучение компонента Symfony Form на пару недель. Разработчики Symfony проводят капитальный ремонт Form API. Насколько я понимаю, большая часть этого сделана, и запрос на отправку был отправлен в главный репозиторий .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...