【发布时间】:2018-10-19 12:55:59
【问题描述】:
我有一个 ActiveForm 用于从中获取一些数据,当我单击发送按钮时,它将运行模型(在本例中为 csv 文件生成器),但当我删除该方法时,刷新不起作用它会刷新。
经过一些测试,fputcsv() 似乎会停止脚本,因此之后的所有内容都不会运行。
查看
public function actionIndex()
{
$model = new Export();
if ($model->load(Yii::$app->request->post()) && $model->validate()) {
$fields = Yii::$app->request->post('Export');
\backend\models\Export::generate();//this prevents the refresh
Yii::$app->session->setFlash();
return $this->refresh();
} else {
return $this->render('index' , ['model' => $model]);
}
}
型号
static public function generate()
{
header('Content-Encoding: UTF-8');
header('Content-Type: text/csv; charset=UTF-8');
header('Content-Disposition: attachment; filename="sample.csv"');
header("Pragma: no-cache");
header("Expires: 0");
$data = [array comes here];
$fp = fopen('php://output', 'w') or die("Unable to open file!");
fputs($fp, $bom =( chr(0xEF) . chr(0xBB) . chr(0xBF) ));
foreach ( $data as $line ) {
fputcsv($fp , $line , ';' );
}
stream_get_contents($fp);
fclose($fp);
}
【问题讨论】:
-
您是否尝试开始下载并刷新页面?使用文本编辑器查看 sample.csv。我猜你在那里找到了你所期望的(或者错误'标头已经发送......')。你可以通过JS解决它。看here。
-
是的,我创建了一个 csv 文件,下载它,然后我想刷新页面。 csv 文件中没有错误。
-
这就是你的完整功能
generate()? -
标题指示浏览器将所有后续数据放入文件 sample.csv。因此,任何 HTML 都会进入其中。不确定这是否真的需要您。最好保持简单,然后开始下载。为什么要重新加载页面?请注意,
$this->refresh()也发送标头。 ...顺便说一句:stream_get_contents($fp);应该做什么?Yii::$app->session->setFlash();没有参数?请提供正确的代码... -
reload是重置表单,触发flash。
标签: yii2