Warm tip: This article is reproduced from serverfault.com, please click

其他-Symfony 5:如何使用OneToMany关系向会话中经过身份验证的用户添加数据?

(其他 - Symfony 5 : how to add data to a user authenticated in a session, using OneToMany relation?)

发布于 2020-12-03 03:54:18

我想通过标题字段将数据添加到策略表,并将其与使用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()
    ]);

我的FormType文件:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('title')
        ->add('user', EntityType::class,[
            'class' => User::class,
            'choice_label' => 'username'
        ])
    ;
}
Questioner
William
Viewed
0
Julien B. 2020-12-03 12:52:46

可以通过当前用户来形成选项,也可以在表单中注入安全组件并从那里使用它。我认为,如果你知道自己总是只有一个选项,那是一个奇怪的选择,但这是另一回事。

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()],
        ])
    ;
}