我正在使用PhpWord动态生成多个文档,但目前它只是在创建一个文档后退出。例如,下面的优惠券循环在数组中有3个项目,因此它应该创建3个单独的文档 - 只创建1个。
此外,创建文档后,我想将al 3压缩为ZIP文件。 Laravel有可能吗?
我使用的代码是:
$phpWord = new \PhpOffice\PhpWord\PhpWord();
foreach($request->get('order') as $id)
{
$coupons = $coupon->whereOrderNumber($id);
if($coupons->count() == 0)
{
// only happens when customer has not bought a voucher
return Response::json(array('error' => true, 'title' => 'Error!', 'msg' => 'This customer has not purchased a voucher and therefore a voucher letter cannot be generated.'));
}
foreach($coupons->get() as $coupon)
{
$filename = 'Voucher-'.time().'.docx';
$document = $phpWord->loadTemplate(storage_path('templates/voucher.docx'));
$document->setValue('code', $coupon->code);
$document->saveAs(storage_path('exports/'.$filename));
}
}
有谁知道如何在循环中生成多个文档?
答案 0 :(得分:1)
time()
以秒为单位返回以秒为单位测量的当前时间 Unix Epoch(1970年1月1日00:00:00 GMT)。
因此,如果您的脚本非常快,文件将被覆盖。 您可以使用计数器并为其添加值,如下所示:
foreach($coupons->get() as $key => $coupon)
{
$filename = 'Voucher-'.time().' - '. $key . '.docx';
$document = $phpWord->loadTemplate(storage_path('templates/voucher.docx'));
$document->setValue('code', $coupon->code);
$document->saveAs(storage_path('exports/'.$filename));
}
要压缩文档,您可以使用https://github.com/Chumper/Zipper
$zipper->make('test.zip')->folder(storage_path('exports'));