Symfony 4.1
这是我的个人表单类型:
class PersonalType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('firstName', TextType::class, [
'required' => true,
'attr' => [
'placeholder' => 'First name'
],
])
//......
这是我的ClientType,使用PersonalType作为子窗体
class ClientType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$client = $builder->getData();
$builder
->add('personalDetails', PersonalType::class, [
'data' => $client
])
//....
我已经将事件侦听器添加到了子窗体类型,但是没有被调用,所以我将事件侦听器移到了ClientType。
我想向PersonalType添加一个字段,我这样做是这样的:
$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
$client = $event->getData();
$form = $event->getForm();
$form->add('title', TextType::class, [
'type' => new PersonType(),
'label' => 'Title'
]
}
但是我遇到一个错误,说option "type" does not exists
我在这里想念什么?
答案 0 :(得分:0)
['type'=> ...]选项不是Symfony的TextType的有效选项。有关有效选项,请参见此处的参考:https://symfony.com/doc/current/reference/forms/types/text.html。您还可以在此处查看其他内置表单类型的有效选项:https://symfony.com/doc/current/reference/forms/types.html。
也许您已经看到了一种自定义表单类型,该类型通过使用带有configurationOptions
或setDefaults
的{{1}}方法来定义“类型”选项(请参见此处:https://symfony.com/doc/current/form/create_custom_field_type.html )。我猜这是从您的PersonType。 TextType不支持。
我不确定您到底想怎么做
setRequired
行。如果您只是想将“ title”字段添加到PersonType中,并且由于某种原因,您想使用事件侦听器而不是直接在PersonType类中进行操作(这在大多数情况下是最简单的选择),感觉只是删除该行就足以使其正常工作?