У меня есть приложение Laravel / Angular, и на одной из страниц пользователю предоставляется возможность экспортировать данные об одной / нескольких транзакциях в файл PDF.
Созданный в настоящее время PDF-файл отображает 3 страницы (первая - для каждой фактической транзакции, а на последующих страницах отображается дополнительная информация о счетах, к которым принадлежат эти транзакции).
Я хочу добавить некоторые функциональные возможности к этой функции, чтобы в случае, если экспортируемая транзакция имела только одну дату депозита, когда ее статус был «запрос», тогда на самом деле должна быть только первая страница сгенерированного в настоящее время PDF-файла. генерируется (остальная часть PDF, которая обычно генерируется, должна быть исключена).
Я добавил оператор if
в файл blade.php, который отображает содержимое PDF следующим образом:
@if(($transaction->count($transaction['transactionItem']) == 1) && ($transaction['transactionItem']['currentStatusId'] == '1010'))
<body ... >
// Content of first page of PDF here
</body>
@else
<body ... >
// Original content of full PDF here
</body>
@endif
В HTML элемент меню со ссылкой, которая вызывает функцию для загрузки PDF, записывается с помощью:
<td class="provActionsCell contactAddressCell text-center table__priority-column" id="reduceWidth-doublePlus" dropdown>
<a href class="icon icon-kog" dropdownToggle></a>
<ul class="dropdown-menu" aria-labelledby="angular-simple-dropdown">
...
<li *ngIf="payer.provStatusTag !== 'NA'" (click)="exportSingleTransactionToPDF(payer)"><a href="">Download PDF</a></li>
</ul>
</td>
Функция exportSingleTransactionToPDF()
записана в файле условных-напоминаний с:
exportSingleTransactionToPDF(payer) {
let requestData = (<any>Object).assign({});
console.log("requestData: ", requestData);
payer.loading = true;
requestData['transactionItem'] = payer;
console.log("requestData['transactionItem']: ", requestData['transactionItem']);
this.provService.generateSingleTransactionPDF(requestData).subscribe(
(data:any) => {
payer.loading = false;
this.showPrintDialog = false;
},
(error:any) => {
const message = new Message();
message.type = MessageType.ERROR;
message.message = error.message || 'There was a problem generating the PDF.';
this.messagingService.emitMessage(message);
payer.loading = false;
}
);
return false;
}
и функция generateSingleTransactionPDF()
, которую она вызывает, определяется в prov.service.ts
с помощью:
generateSingleTransactionPDF(data: any): Observable<any> {
const requestOptions = new RequestOptions({ headers: this.pdfHeaders, responseType: ResponseContentType.Blob });
console.log("requestOptions: ", requestOptions);
console.log("data: ", data);
return this.http
.post(this.generateSingleTransactionPDFUrl, data, requestOptions)
.map((res: Response) => {
const blob = <Blob>res.blob();
FileSaver.saveAs(blob, `provisional-tax-reminder.pdf`);
})
.catch(this.handleError);
}
В настоящее время, когда я пытаюсь загрузить PDF, в консоли отображаются некоторые отладки, показывающие, что эти функции вызываются, и в браузере появляется сообщение об ошибке:
При создании PDF-файла возникла проблема
, который явно исходит от функции exportSingleTransactionToPDF()
, поскольку это единственное место в проекте, где появляется это сообщение об ошибке. Эта ошибка выдается, когда вызов функции generateSingleTransactionPDF()
возвращает ошибку, поэтому ясно, что оператор return
для generateSingleTransactionPDF()
как-то возвращает ошибку, но я не уверен, как / почему, или как бы отладить что это за ошибка и что ее вызывает ...?
Функция generateSingleTransactionPDFUrl()
, вызываемая внутри .post()
оператора return
, определяется в начале файла prov.service.ts с помощью:
private generateSingleTransactionPDFUrl: string = BASE_URL + '/web-api/t/prov/pdf';
В консоли браузера отображается сообщение об ошибке:
POST http: // ... 500 (Внутренняя ошибка сервера)
непарсируемый ответ
Кажется, это говорит о том, что ошибка в том, что ответ HTTP-запроса не разбирается, но я не могу понять, почему это так ... операторы console.log()
, которые я помещаю внутри функции generateSingleTransactionPDF()
в prov.service.ts отображают переменные requestOptions
& data
в консоли - и они, кажется, содержат правильные данные ... поэтому я не уверен, почему он говорит, что ответ не может быть обработан - у кого-нибудь есть идеи?
Редактировать
Итак, заглянув в файл журнала, я вижу ошибку, которая говорит:
Следующая ошибкаException: неопределенная переменная: транзакция (представление: /.../reminder.blade.php) в /../views/419cdd3906d761bc1bb55581502a15d04c1fe7a7.php:9
, который, кажется, жалуется на if
, который я поместил в начале моего файла blade.php:
@if(($transaction->count($transaction['transactionItem']) == 1) && ($transaction['transactionItem']['currentStatusId'] == '1010'))
Как / должен я получить доступ к этой переменной $transaction
из файла blade.php?