首页 > 解决方案 > Symfony 5:如何使用 OneToMany 关系向会话中经过身份验证的用户添加数据?

问题描述

我想通过标题字段将数据添加到策略表,并将其与在会话中使用user_id外键进行身份验证的用户相关联。

下面的代码将数据添加到关系工作的策略表中,但通过在我的 FormType 文件中编码的选择选项(choice_label) 列出了我视图中的所有用户。

我想用让用户在会话中进行身份验证的代码替换该选择选项

我查看了文档的安全会话部分,但无法使其工作。

我的表:数据库

我的控制器文件:

public function create(Strategy $strategy = null, Request $request, EntityManagerInterface $em)
{
    $strategy = new Strategy();
    
    $form = $this->createForm(StrategyType::class, $strategy);
    $form->handleRequest($request);

    if($form->isSubmitted() && $form->isValid()){
        $em->persist($strategy);
        $em->flush();
        return $this->redirectToRoute("frStrategy");
    }

    return $this->render('strategy/updateStrategy.html.twig', [
        "strategy" => $strategy,
        "form" => $form->createView()
    ]);

我的表单类型文件:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('title')
        ->add('user', EntityType::class,[
            'class' => User::class,
            'choice_label' => 'username'
        ])
    ;
}

标签: symfonysessionforeign-keys

解决方案


要么将当前用户传递给表单,要么在表单中注入安全组件并从那里使用它。我认为如果你知道你总是只有一个选项,那么选择一个选项有点奇怪,但那是另一个主题。

private $security;

public function __construct(Security $security)
{
    $this->security = $security
}    

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('title')
        ->add('user', EntityType::class,[
            'class' => User::class,
            'choice_label' => 'username',
            'choices' => [$this->security->getUser()],
        ])
    ;
}

推荐阅读