我有这个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。
1条答案
按热度按时间izkcnapc1#
经过几个小时的努力想出我的问题,我想出了问题...我使用了一个Twig form_theme,它不能正确地呈现集合原型,特别是在使用Symfony核心类型时。