使用默认Symfony Type的嵌入表单不会在data-prototype中呈现HTML字段

9jyewag0  于 2023-06-24  发布在  其他
关注(0)|答案(1)|浏览(94)

我有这个Symfony表单,当我试图生成一个集合表单并在HTML中正确呈现时,它工作得很好。

TestType使用entry_type=>PhoneType,也可以在这里找到。

TestType

<?php

namespace App\Form;

use App\Entity\Core\SystemParameter;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;

class TestType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('value',CollectionType::class,array(

                'label'=>"Phone number list",
                'required'=>false,
                'entry_type'=>TextType::class,
                'entry_options'=>[
                    'label'=>'Phone Number'
                ],
                'allow_add'=>true,
                'allow_delete'=>true,
            ));

    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class'=>SystemParameter::class
        ]);

    }

}

PhoneType

<?php

namespace App\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;

class PhoneType extends AbstractType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('phone',TextType::class,array(
                'label'=>'Phone'
            ))
        ;
    }

    /**
     * @param OptionsResolver $resolver
     */
    public function configureOptions(OptionsResolver $resolver)
    {
    }

}

但是,我不想使用基本上只包含TextType的PhoneType,而是想在TestType中使用TextType,如下所示。然而,它不工作,我没有任何错误,但数据原型不包含字段呈现html输入。我做错了什么?在我看来,我想做的事情与Symfony文档中显示的类似:

直接使用Symfony TextType时的Data-prototype

没有输入字段...

<tr>
                                    <td>
                <a class="btn-sm remove c-yellow" title="Remove" href="#">
                    <strong>X</strong>
                </a>
            </td>
        </tr>

使用PhoneType时的Data-prototype(工作)

<tr>
                                        <td class="field0">
                                        <input type="text" id="test_value___name___phone" name="test[value][__name__][phone]" class="form-control" />
                </td>
                                        <td>
                <a class="btn-sm remove c-yellow" title="Remove" href="#">
                    <strong>X</strong>
                </a>
            </td>
        </tr>

不使用PhoneType的预期代码

use App\Entity\Core\SystemParameter;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;

class TestType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('value',CollectionType::class,array(

                'label'=>"Phone number list",
                'required'=>false,
                'entry_type'=>TextType::class,
                'entry_options'=>[
                    'label'=>'Phone Number'
                ],
                'allow_add'=>true,
                'allow_delete'=>true,
            ));

    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class'=>SystemParameter::class
        ]);

    }

}

Symfony documentation: https://symfony.com/doc/current/reference/forms/types/collection.html
我希望它能像Symfony文档中所示的那样工作,而不必创建新的Type。

izkcnapc

izkcnapc1#

经过几个小时的努力想出我的问题,我想出了问题...我使用了一个Twig form_theme,它不能正确地呈现集合原型,特别是在使用Symfony核心类型时。

相关问题