添加到 Symfony 表单操作

Add to Symfony form action

我创建了一个带有选项卡的页面(使用 bootstrap),所有选项卡都有自己的形式。他们都运作良好。我的问题是当我收到表单错误时,我想打开错误所在的选项卡。

我当前的控制器代码:

public function add(Request $request, EntityManagerInterface $em): Response {

    $this->denyAccessUnlessGranted('ROLE_USER');

    $entityAdd = new \App\Entity\add();
    $form = $this->createForm(\App\Form\Add::class, $entityAdd);

    $form->handleRequest($request);
    if ($form->isSubmitted() && $form->isValid()) {

函数在AddFormType.php

    public function buildForm(FormBuilderInterface $builder, array $options) {
        $builder
                ->add(...)
                ->add(...)
                ->add(...)
                ->getForm()
        ;
    }

我不是自己创建表单,我使用的是 symfony 表单组件,但我不确定如何修改表单方法以将表单哈希(例如 /add#list-tab1)添加到表单方法。

{{ form_start(AddForm) }}

{{ form_row(AddForm.name1) }}
{{ form_row(AddForm.name2) }}
{{ form_row(AddForm.save) }}

{{ form_end(AddForm) }}

可以用createForm method的第三个参数传递hash:

$form = $this->createForm(
    \App\Form\Add::class,
    $entityAdd,
    ['action' => '#list-tab1']
);

然后,您可以使用 setAction() 方法并在 AddFormType.php 文件中检索 buildForm() 方法中的选项:

$builder
    ->setAction($options['action'])
    ->add(...)

注意:仅在 setAction() 方法中使用散列(而非完整路由),仅当表单提交到当前路由时才有效。

您必须将 #list-tab1 替换为真实的标签 ID。

可以直接在form_start()的参数中传递动作,在Twig模板中:

{{ form_start(form, { action: '/add#list-tab1' }) }}

请参阅 Symfony doc 关于此字段选项。