在 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?