Laravel 5使用PhpWord生成多个文档和ZIP

时间:2015-10-02 08:58:12

标签: php laravel laravel-5

我正在使用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));
        }
    }

有谁知道如何在循环中生成多个文档?

1 个答案:

答案 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'));