Как обернуть поле ввода тегом <div>при использовании с Symfony formbuilder? - PullRequest
0 голосов
/ 18 февраля 2019

Я создаю поле ввода с помощью Symfony:

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

Вывод:

<input type="text" id="form_color" name="form[color]" class="form-control">

Вывод, который мне понадобится:

<div class="cp input-group colorpicker-component">
<input type="text" id="form_color" name="form[color]" class="form-control" /> <span class="input-group-addon"><i></i></span>
</div>

Это означает, что мне как-то нужно добавить родителя в конкретное поле формы.Я не могу добавить его в фактическую форму, потому что этот родительский div добавляется в поле только в определенных случаях.Есть ли способ сделать это в formbuilder?

1 Ответ

0 голосов
/ 18 февраля 2019

Я бы создал свой собственный тип настраиваемого поля для обработки этих полей.

Сначала определите класс поля

// src/Form/Type/ColorSelectorType.php
namespace App\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\TextType;

class ColorSelectorType extends AbstractType
{
    public function getParent()
    {
        return TextType::class;
    }
}

Затем вам нужно будет создатьшаблон для поля:

{# templates/form/fields.html.twig #}
{% block color_selector_widget %}
    {% spaceless %}
       <div class="cp input-group colorpicker-component">
            <input{{ block('widget_container_attributes') }} />
                 <span class="input-group-addon"><i></i></span>
       </div>
    {% endspaceless %}
{% endblock %}

Зарегистрируйте свои пользовательские шаблоны:

# config/packages/twig.yaml
twig:
    form_themes:
        - 'form/fields.html.twig'

И, наконец, используйте новое поле:

$formBuilder->add($field['fieldName'], ColorSelectorType::class);

Логически вы будетеМне нужно настроить это в соответствии с вашими потребностями, но этого должно быть достаточно, чтобы вы начали.

...