在 Symfony 中提交表单后如何关闭窗口选项卡?

Posted

技术标签:

【中文标题】在 Symfony 中提交表单后如何关闭窗口选项卡?【英文标题】:How to close Window Tab After Submitting a Form in Symfony? 【发布时间】:2021-08-10 12:04:54 【问题描述】:

我正在窗口选项卡中提交一个 symfony 表单。提交按钮应在提交表单并刷新打开器页面后关闭窗口。所以我用 jquery 来做这部分。

$('#submitAndClose').on('submit', function () 
   setTimeout(
     function () 
        opener.location.reload(true);
        window.close();
     
   , 3000);
)

但我猜是因为 symfony 在提交后刷新页面,所以 jquery 无法正常工作。

这是我在 SymfonForm 中的提交按钮:

->add('saveAndClose', SubmitType::class, [
     'label' => 'Save and close',
])

这是树枝部分:

 form_widget(form.saveAndClose, 
    attr: 
        id: 'submitAndClose',
    
) 

这是控制器部分,Nico Hasse 请求更多信息:

/**
* @param Request $request
* @param int $id
*
* @return Response
*
* @Route("/id",  methods="GET", "POST")
*/
public function editAction(
    Request $request,
    int $id
): Response 

    $user = $this->em->getRepository(User::class)->find($id);
    $form = $this->createForm(UserType::class, $user);
    $form->handleRequest($request);
    if ($form->isSubmitted() && $form->isValid()) 
        $this->em->flush();
    

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

现在,当我提交表单时,它可以工作,但不会关闭窗口。

setTimeout 仅用于测试,但不是必需的。 有什么想法吗?

【问题讨论】:

提交后为什么要重新加载?为什么不直接关闭标签页? 请分享更多细节。这与 php、Symfony 或 Twig 有什么关系?他们都不处理浏览器标签 我不明白为什么我得到-1 @AngelDeykov 有什么办法可以防止提交后重新加载页面吗? @NicoHaase OP 必须在标签发送到服务器后关闭标签 【参考方案1】:

为什么要重新加载页面?由于您重新加载页面,它不会关闭,您可以使用纯 javascript 执行此操作。

document.getElementById('saveAndClose').onclick = () => window.close();

但你的情况可能像this picture.

【讨论】:

【参考方案2】:

您不应使用超时来关闭选项卡。 您可以在处理表单后传递一个变量,例如close_window,到视图。在视图中,您可以执行以下操作而不是超时:

% if close_window|default %
    <script>window.close();</script>
% endif %

【讨论】:

非常感谢,你拯救了我的一天。我想用 ajax 来做这件事并重写我的控制器和所有东西。这种方式要容易得多。 @DarkBee

以上是关于在 Symfony 中提交表单后如何关闭窗口选项卡?的主要内容,如果未能解决你的问题,请参考以下文章

iPad Chrome - 在新窗口/选项卡中提交表单不起作用

在html中如何链接表单提交以在新选项卡中打开并链接相对URL?

重新验证表单 Symfony 3 [关闭]

提交表单后如何关闭此窗口?

如果填写了特定字段,如何在新选项卡中提交表单,否则正常提交?

javascript 表单提交后,在新选项卡重定向URL中打开