也许你们中的一些人可以帮助我? 我正在努力构建我正在构建的表单。在我的应用程序中,用户可以创建名为“家庭”的群组并邀请其他用户加入该家庭。我想创建一个表单,以便家庭管理员可以管理属于其家庭成员的用户。
我可以在实体用户和家庭之间创建多对多关系,但我想存储有关该关系的额外信息,例如用户的角色、他/她进入家庭的日期...
因此,我有一个 Family 和一个 User 实体,它们与 FamilyMember 实体都具有 OneToMany 关系。以下是它们的主要属性:
Entity\User
#[ORM\Entity(repositoryClass: UserRepository::class)]
#[UniqueEntity(fields: ['email'], message: 'There is already an account with this email')]
class User implements UserInterface, PasswordAuthenticatedUserInterface
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
#[ORM\Column(length: 180, unique: true)]
private ?string $email = null;
#[ORM\Column(length: 255)]
private ?string $lastname = null;
#[ORM\Column(length: 255)]
private ?string $firstname = null;
#[ORM\Column(length: 255)]
private ?string $avatar = null;
#[ORM\OneToMany(mappedBy: 'user', targetEntity: FamilyMember::class, orphanRemoval: true)]
private Collection $familyMember;
public function __construct()
{
$this->familyMember = new ArrayCollection();
}
Entity\Family
#[ORM\Entity(repositoryClass: FamilyRepository::class)]
#[ORM\HasLifecycleCallbacks]
class Family
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
#[ORM\Column(length: 255)]
private ?string $name = null;
#[ORM\OneToMany(mappedBy: 'family', targetEntity: FamilyMember::class)]
private Collection $familyMembers;
public function __construct()
{
$this->familyMembers = new ArrayCollection();
}
Entity\FamilyMember
#[ORM\Entity(repositoryClass: FamilyMemberRepository::class)]
class FamilyMember
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
#[ORM\ManyToOne(inversedBy: 'familyMember', fetch: "EAGER")]
#[ORM\JoinColumn(nullable: false)]
private ?User $user = null;
#[ORM\ManyToOne(inversedBy: 'familyMemberBis')]
#[ORM\JoinColumn(nullable: false)]
private ?Family $family = null;
#[ORM\Column]
private array $role = [];
Controller\FamilyController
#[Route('/compte/familles/{familyId}/gerer-membres', name: 'family_manage_members', requirements: ['familyId' => '\d+'])]
public function manageFamilyMembers(int $familyId, Request $request): Response
{
$family = $this->familyRepository->find($familyId);
// This is where I am supposed to call the form
有人可以帮我创建一个表单(使用表单类型)吗:
我尝试了不同版本的 FamilyType 和 FamilyMemberType,以及嵌入式集合,但它从未完全发挥作用。
这是我尝试的最后一个版本:
Controler\FamilyController
#[Route('/compte/familles/{familyId}/gerer-membres', name: 'family_manage_members', requirements: ['familyId' => '\d+'])]
public function manageFamilyMembers(int $familyId, Request $request): Response
{
$family = $this->familyRepository->find($familyId);
$familyMembers = $family->getFamilyMembers();
$forms = [];
foreach ($familyMembers as $familyMember) {
$form = $this->createForm(FamilyMemberType::class, $familyMember);
$form->handleRequest($request);
$forms[] = $form->createView();
}
return $this->renderForm('user/family-manage-members-form.html.twig', [
'familyMemberForms' => $forms,
]);
}
class FamilyMemberType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('role', ChoiceType::class, [
'label' => 'Rôle',
'choices' => [
'Administrateur' => 'FAMILY_ADMIN',
],
'multiple' => true,
'expanded' => true
])
;
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => FamilyMember::class,
]);
}
}
user/family-manage-members-form.html.twig
{% for form in familyMemberForms %}
{{ form.vars.value.user.fullName}}
{{ form_start(form) }}
{{ form_widget(form) }}
{{ form_end(form) }}
{% endfor %}
<input type="submit" value="Enregistrer" class="btn btn-primary">
表单渲染的“外观”正是我想要的:有关用户的信息(其全名)+使他成为管理员的能力。 问题是我要么每个用户有一个提交按钮,要么最后有一个超出任何 HTML 的提交按钮。问题是有多种形式。 我无法添加按钮来从家庭中删除用户。
感谢您以任何方式帮助我!