Laravel / Angular-生成PDF时POST 500(内部服务器错误)

时间:2018-10-29 14:32:07

标签: php angular laravel post httpresponse

我有一个Laravel / Angular应用程序,在其中一个页面上,用户可以选择将有关单个交易/选择的交易的数据导出到PDF文件。

当前生成的PDF显示3页(第一页用于每个实际交易,随后的页面显示有关这些交易所属帐户的更多信息)。

我想为此功能添加一些功能,这样,如果要导出的交易仅针对该交易有一个存款日期,则当其状态为“请求”时,则实际上只有当前生成的PDF的第一页是生成的(通常应生成的PDF的其余部分应删除)。

我已在Blade.php文件中添加了if语句,该语句显示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的{​​{1}}语句以某种方式返回错误,但是我不确定如何/为什么,或者我将如何调试该错误是什么,以及导致它的原因...?

generateSingleTransactionPDF()语句的generateSingleTransactionPDFUrl()中调用的return函数是在prov.service.ts文件的开头定义的,

.post()

浏览器控制台中显示错误,提示:

  

POST http:// ... 500(内部服务器错误)

     

无法解释的反应

这似乎表明该错误是因为HTTP请求的响应不可解析,但是我无法弄清楚为什么会是这种情况……我在{{ prov.service.ts中的1}}函数在控制台中显示private generateSingleTransactionPDFUrl: string = BASE_URL + '/web-api/t/prov/pdf'; console.log()变量-它们似乎保存了正确的数据...所以我不确定为什么要说回应无法解释-任何人有任何想法吗?

修改

因此,在查看了日志文件后,似乎出现了一个错误消息:

  

下一个ErrorException:未定义的变量:/../ views / 419cdd3906d761bc1bb55581502a15d04c1fe7a7.php:9

中的事务(视图:/.../reminder.blade.php)

似乎是在抱怨我在Blade.php文件开头放置的generateSingleTransactionPDF()

requestOptions

如何/应该如何从blade.php文件内部访问此data变量?

0 个答案:

没有答案