Symfony 5 - 带有 TextType 的自定义 ChoiceType
Posted
技术标签:
【中文标题】Symfony 5 - 带有 TextType 的自定义 ChoiceType【英文标题】:Symfony 5 - Custom ChoiceType with TextType 【发布时间】:2020-12-10 14:51:09 【问题描述】:在 Symfony 5 中,我在表单中有一个 ChoiceType,我有 2 个选择。我想在你可以写你想要的东西的地方放一个“其他”选择。 我尝试在选项中添加一个 TextType。
提前致谢
->add('projectType', ChoiceType::class,[
'label' => 'Votre projet concerne : ',
'choices' => [
'Maison' => 'Maison',
'Appartement' => 'Appartement',
]
])
你知道如何将 TextType 添加到我的 ChoiceType 中吗?
【问题讨论】:
不确定你能做到这一点。但是当用户选择“其他”时,您可以显示其他文本字段 【参考方案1】:这并不容易,但您可以使用自定义表单类型字段和 Twig 主题:
1.创建一个新的字段类型,如ChoiceInputType
。该类应包含两种字段类型,ChoiceType 和 TextType。
/**
* Class ChoiceInputType
*/
class ChoiceInputType extends AbstractType
/**
* @inheritdoc
*/
public function buildForm(FormBuilderInterface $builder, array $options): void
$builder
->add(
'choiceType',
ChoiceType::class,
[
'required' => false,
'choices' => $options['choices'],
'label' => 'Make your choice...',
]
)
->add(
'choiceInput',
TextType::class,
[
'required' => false,
'label' => false,
'attr' => [
'placeholder' => 'Other choice...',
],
]
);
/**
* @inheritdoc
*/
public function buildView(FormView $view, FormInterface $form, array $options): void
$view->vars['choices'] = $options['choices'];
/**
* @inheritdoc
*/
public function configureOptions(OptionsResolver $resolver): void
$resolver->setRequired(['choices']);
$resolver->setDefaults(
[
'choices' => [],
]
);
/**
* @inheritdoc
*/
public function getName(): string
return 'choiceInputType';
2.在您的新自定义字段类型上创建twig theme 并根据需要对其进行组织。
% block choiceInputType_widget %
... custom here ...
% endblock %
3.在表单中使用新的ChoiceInputType
。
$builder->add(
'choiceInputType',
ChoiceInputType::class,
[
'mapped' => false,
'block_prefix' => 'choiceInputType',
'label' => false,
'choices' => [
'test 1' => 1,
'test 2' => 2,
'test 3' => 3,
]
]
);
这里有一些与此主题类似的其他问题的链接,可以帮助您:
Symfony Forms: html5 datalist Customize the rendering of a choice/entity field in Symfony2【讨论】:
以上是关于Symfony 5 - 带有 TextType 的自定义 ChoiceType的主要内容,如果未能解决你的问题,请参考以下文章
Symfony 2 - 为 EntityType 定义选定的值