Есть код:
public function actionPrint($id)
{
$model = Order::findOne($id);
$orders = $model->products;
$phpWord = new \PhpOffice\PhpWord\PhpWord();
if(Yii::$app->request->isGet){
if(Yii::$app->request->get('pdf') == 'bill'){
$doc = new \PhpOffice\PhpWord\TemplateProcessor(Yii::getAlias('@webroot').'/files/print_temp/bills_temp.docx');
$doc->setValue('d_date', date('d.m.Y'));
$doc->setValue('c_inn', $model->client->inn);
$doc->setValue('c_name', $model->client->name);
foreach ($orders as $product){
$doc->setValues(array('p_name' => $product['description'], 'p_count' => $product['count'], 'p_price' => $product['price'], 'p_sum' => ($product['price'] * $product['count'])));
}
$str = 'num';
$doc->cloneRow('num', count($orders));
$dir = '/files/';
$files_dir = Yii::getAlias('@webroot')."/".$dir;
$file = str_replace("/","-", "Договор №".date("d-m-Y")).".docx";
header('Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document');
header('Content-Disposition: attachment;filename="invoice.docx"');
header('Cache-Control: max-age=0');
$doc->saveAs($files_dir.$file);
}
}
return true;
}
Все работает корректно, кроме заполнения данных. В шаблоне предусмотрена таблица вида:
Я пробовал использовать цикл foreach для заполнения данных в связке с cloneRow, но ничего не получается. Выводится только первая запись массива и клонируется по количеству записей.
Пробовал использовать cloneRowAndSetValue, ситуация аналогичная cloneRow, только запись в этом случае выводится последняя и так же клонируется по количеству записей в массиве.
Вопрос: как корректно заполнять данные в шаблоне Word?