如何在扩展中添加 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
,所以我对 TextTypeColorPickerExtension
的 class
的尝试是不正确的,因为它创建了一个无限循环,下面是步骤:
TextType
添加
ColorPickerType
由于扩展 添加到 TextType
由于 ColorPickerType
的实施,TextType
添加到 ColorPickerType
等等……
我的问题已经通过逻辑解决了,判断是需要添加TextType还是ColorPickerType
对于 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
,所以我对 TextTypeColorPickerExtension
的 class
的尝试是不正确的,因为它创建了一个无限循环,下面是步骤:
TextType
添加ColorPickerType
由于扩展 添加到 TextType
添加到ColorPickerType
TextType
由于 ColorPickerType
的实施,等等……
我的问题已经通过逻辑解决了,判断是需要添加TextType还是ColorPickerType