如何在扩展中添加 child 以形成构建器?

How to add a child to form builder inside an extension?

对于 Symfony 专家来说,这可能是一个非常简单的问题,但对于我这个技术菜鸟来说,这很难。当涉及颜色时,我的任务是在文本框附近放置一个颜色选择器。我在 Symfony 文档中阅读了很多关于表单、表单项、扩展等的文章,并想出了通过向表单构建器添加颜色选择器 child 来扩展 TextType 的想法。颜色选择器的 class 已经存在。这是我的代码:

<?php

namespace Pph\App\SingBundle\Form\Extension;

use Symfony\Component\Form\AbstractTypeExtension;
use My\Name\Space\ColorPickerType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;

/**
 * TextTypeColorPickerExtension.
 *
 * This is an extension to TextType form field, to allow color picker usage when colors are involved
 *
 * @author some dude
 */
class TextTypeColorPickerExtension extends AbstractTypeExtension
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('text', ColorPickerType::class, array(
            'required' => false,
            'empty_data' => '',
        ));
    }

    /**
     * {@inheritdoc}
     */
    public function getExtendedType()
    {
        return TextType::class;
    }
}

而这,可以理解地以无限递归结束。这还没有处理颜色逻辑,这将是下一步,现在我正在尝试扩展 TextType。在添加颜色选择器以某种方式停止递归后,我可以以某种方式标记我的 TextType object 吗?

结果是 ColorPickerType 添加了一个 TextType,所以我对 TextTypeColorPickerExtensionclass 的尝试是不正确的,因为它创建了一个无限循环,下面是步骤:

  • TextType 添加
  • ColorPickerType 由于扩展
  • 添加到 TextType 由于 ColorPickerType 的实施,
  • TextType 添加到 ColorPickerType

等等……

我的问题已经通过逻辑解决了,判断是需要添加TextType还是ColorPickerType