我想创建几个CollectionType
字段。
我有版主,我从db加载所有主持人,并希望将子用户分配给表单中的每个主持人
尝试做类似的事情:
public function buildForm(FormBuilderInterface $builder, array $options)
{
foreach ($options['moderators'] as $mod) {
$builder
->add('users['.$mod->getId().']', CollectionType::class, array(
'entry_type' => UserFields::class,
'allow_add' => true,
'label' => false,
'entry_options' => array(
),
));
}
}
在$options['moderators']
中有一些主持人实体。
我想创建与版主实体相同数量的CollectionType
字段(上面的示例 - 不起作用,因为我不能将[]
作为字段名称传递)
每个版主都有唯一的ID,所以我可以使用它并将此ID传递给每个CollectionType
,但如何?
Controller
函数中找回CollectionType的id?答案 0 :(得分:0)
我认为你需要更深入地了解收藏品是什么;)
您的收藏无效,因为entry_type
应为formType。我猜你的情况应该是EntityType
(如果你想让用户从用户列表中选择)。
因此,假设您希望每个主持人的主持人集合是一个子用户集合(顺便说一下,您通常会制作一个CRUD并分别编辑每个主持人,因此您不需要带有子集合的集合),你需要这样的东西:
ModeratorCollectionType.php
<?php
namespace AppBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
use Symfony\Component\Form\FormBuilderInterface;
class ModeratorCollectionType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('moderators', CollectionType::class, [
'entry_type' => ModeratorType::class,
'prototype' => true,
'allow_add' => true
]);
}
}
ModeratorType.php
<?php
namespace AppBundle\Form;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class ModeratorType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('users', CollectionType::class, [
'entry_type' => EntityType::class,
'entry_options' => [
'class' => 'AppBundle:User',
],
'prototype' => true,
'allow_add' => true
]);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => 'AppBundle\Entity\Moderator',
]);
}
}
在您的控制器中,您将使用ModeratorCollection
制作表格$form = $this->createForm(ModeratorCollectionType::class, $data = []);