Как я могу добавить элемент в форму, созданную с помощью formbuilder (Symfony)? - PullRequest
0 голосов
/ 21 ноября 2018

Я создаю форму через Formbuilder в Symfony4:

$formBuilder->add($fieldMapping['fieldName'], TextType::class, array('attr' => array('class' => 'form-control')));

Это дает мне следующий вывод:

<div>
   <label for="form_username" class="required">Username</label>
   <input type="text" id="form_username" name="form[username]"  class="form-control">
</div>

Я хотел бы добавить строку после поля ввода,поэтому результат выглядит так:

<div>
   <label for="form_username" class="required">Username</label>
   <input type="text" id="form_username" name="form[username]" required="required" class="form-control">
   <span class="info" data-name="form[username]">
</div>

Мой подход:

$formBuilder->add($fieldMapping['fieldName'], TextType::class, array('attr' => array('class' => 'form-control', 'after' => "<span class='info' data-name='form[username]'></span>")));

Но это не правильно

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Как сказал @Ahmed EBEN HASSINE, предпочитает веточку формы https://symfony.com/doc/current/form/form_customization.html#adding-help-messages

Внутри одного шаблона

{% use 'form_div_layout.html.twig' with form_widget_simple as base_form_widget_simple %}

{% block form_widget_simple %}
    {{ block('base_form_widget_simple') }}
    <span class="info" data-name="{{ full_name }}">
{% endblock %}


{# rest of your code #}

Для всех ваших шаблонов создайте базовый файл

{# template/form/fields.html.twig #}
{% extends 'form_div_layout.html.twig' %}

{% block form_widget_simple %}
    {{ parent() }}

    <span class="info" data-name="{{ full_name }}">
{% endblock %}

и объявите его в вашей конфигурации

# config/packages/twig.yaml
twig:
    form_themes:
        - 'form/fields.html.twig'
0 голосов
/ 21 ноября 2018

Вы можете распечатать отдельную этикетку и виджет в Twig.

<div>
    {{ form_label(form.fieldName) }}
    {{ form_widget(form.fieldName) }}
    <span class="info" data-name="form[username]">
</div>
...