我需要帮助...这是我第一次在 SO 中提出问题,所以请善待 :)
我试图从 php 强制下载文件,所以当用户点击某个按钮时,他会下载文件。该文件是所有注册用户的 csv(电子邮件、用户名)。
我决定将此按钮添加到 admin > users 屏幕,如您在此屏幕截图中所见。
所以我在administrator/components/com_users/views/users/view.html.php的addToolbar函数中添加了如下代码:
JToolBarHelper::custom('users.export', 'export.png', 'export_f2.png', 'Exportar', false);
此按钮映射到 com_users\controller\users.php 控制器中的以下函数:
public function exportAllUsers() {
ob_end_clean();
$app = JFactory::getApplication();
header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=ideary_users.csv");
header("Pragma: no-cache");
header("Expires: 0");
echo "email,name\n";
$model = $this->getModel("Users");
$users = $model->getAllUsers();
foreach ($users as $user) {
echo $user->email . ", " . ucwords(trim($user->name)) . "\r\n";
}
$app->close();
}
现在,这实际上工作得很好。
这里的问题是,在我下载文件后,如果我点击了管理员中导致 POST 的任何按钮,而不是执行它应该执行的操作,它只是重新下载文件!例如:
- 我点击了“导出”按钮
- “users.csv”下载
- 然后,我点击“搜索”按钮
- “users.csv”下载...什么鬼?
我猜当我点击导出按钮时,会调用一个 JS 并将表单的操作属性设置为 URL ......并期待响应或其他内容,然后阻止其他按钮重新设置表单的操作属性。我想不出任何真正的解决方案,但如果可能的话,我宁愿避免黑客攻击。
那么,在这种情况下,joomla 提供的标准、优雅的解决方案是什么?