如何在扩展中添加子表单构建器?

时间:2018-02-08 16:55:01

标签: php symfony symfony-2.8

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

<?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对象以停止以某种方式递归吗?

1 个答案:

答案 0 :(得分:0)

事实证明ColorPickerType添加了TextType,因此我对class TextTypeColorPickerExtension的尝试不合理,因为它通过以下步骤创建了无限循环:

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

等等等等......

我用逻辑解决了我的问题,该逻辑确定是否需要添加TextType或ColorPickerType。