gpt4 book ai didi

php - 从 Controller 给出空响应并停止页面加载 - Symfony2

转载 作者:行者123 更新时间:2023-12-03 18:58:22 24 4
gpt4 key购买 nike

我正在使用 Symfony2 并且我有一些代码要执行。它执行一些数据库备份类型的工作。这对于这个问题并不重要。

我想要的是当我按下按钮时它会执行代码并返回主视图。不要加载/重新加载任何页面。但是 Controller 总是在等待响应。

The controller must return a response (null given). Did you forget to add a return statement somewhere in your controller?

所以我尝试用 null 来伪造它

按钮代码如下

<li id="menu"><a href="{{ path('backup_label') }}"><span class="icon-align-justify"></span> Backup</a></li>

以及我尝试过的响应代码

return $this->render(
null,
array('status' => 'ok')

);

return $this->render(
'',
array('status' => 'ok')

);

return new Response('<html><body></body></html>')

return new Response()

这些要么返回错误,要么返回空白页。

在没有得到新响应的情况下执行一些 php 代码的方法是什么?调用一个函数,执行并保持相同的 View ,无需任何加载,简单。

我可以使用 ajax 来完成。但我希望如果没有 ajax 可能的话。

最佳答案

下载 zip 文件仍然是一个 HTTP 响应。你可以在 Symfony HTTP 基础上完成你想做的事情,你也不应该绕过那个标准流程,因为它可能会破坏事情。对于初学者来说,退出 Controller 将阻止 kernel.terminate 和其他事件触发,因此不会调用监听器,这可能会破坏您不知道的内容。

改为使用响应对象:

$response = new Response();
$response->headers->set('Content-Description', 'File Transfer');
$response->headers->set('Content-Type', 'application/octet-stream');
$response->headers->set('Content-Disposition', 'attachment; filename=' . basename($zipfname));
$response->setContent(file_get_contents($zipfname));
return $response;

如果您的 zip 文件很大,StreamedResponse 类可能是更好的选择,因为这样它不会在内存中加载文件内容:

$response = new StreamedResponse(function() use ($zipfname) {
readfile($zipfname);
});
// set headers
return $response;

关于php - 从 Controller 给出空响应并停止页面加载 - Symfony2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28272810/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com