我想通过标题字段将数据添加到策略表,并将其与使用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'
])
;
}
可以通过当前用户来形成选项,也可以在表单中注入安全组件并从那里使用它。我认为,如果你知道自己总是只有一个选项,那是一个奇怪的选择,但这是另一回事。
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()],
])
;
}
感谢一百万次,您的解决方案成功了。您甚至可以删除“ choice_label” =>“用户名”,因为正如您所说,这无关紧要。我是stackoverflow的新手,除了将您的回答标记为“谢谢”之外,我还可以做其他事情吗?
如果可以的话,按等级提高答案;如果不能,则可以,很高兴为您提供帮助;)
谢谢你。还有一件事,我试图摆脱由“选择”选项引起的视图选择。我尝试将HiddenType :: class与“数据”选项一起使用,但无法使其正常工作(错误:在属性路径“ user”中给出的“ App \ Entity \ User或null”,“ string”类型的预期参数“。)。我可以使用哪种表单类型和选项(而不是EntityType和选择)来对用户进行身份验证,而无需在我的视图中呈现它?