与Symfony formbuilder一起使用时,如何用<div>标签包装输入字段?

时间:2019-02-18 14:45:32

标签: php symfony oop formbuilder

我正在使用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 :(得分:1)

我将创建自己的custom field type来处理这些字段。

首先定义字段类

// 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);

从逻辑上讲,您需要根据自己的需要对其进行自定义,但这足以使您前进。