代码之家  ›  专栏  ›  技术社区  ›  Noble-Surfer

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

  •  0
  • Noble-Surfer  · 技术社区  · 7 年前

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

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

    我想为这项功能添加一些功能,这样,如果正在导出的交易只有一个存款日期,当其状态为“请求”时,那么实际上只应生成当前生成的PDF的第一页(正常生成的PDF的其余部分应被抑制)。

    我添加了一个 if 对刀锋的陈述。显示PDF内容的php文件,如下所示:

    @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() 函数是在临时提醒中编写的。ts与:

    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() 在prov开始时定义。服务ts文件包含:

    private generateSingleTransactionPDFUrl: string = BASE_URL + '/web-api/t/prov/pdf';
    

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

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

    无可比拟的反应

    这似乎表明错误是因为HTTP请求的响应不可解析,但我不明白为什么会出现这种情况。。。这个 console.log() 我放在报告里的声明 generateSingleTransactionPDF() 在prov。服务ts显示 requestOptions & data 控制台中的变量-它们似乎保存了正确的数据。。。所以我不确定为什么它会说这个反应是不可接受的——有人有什么想法吗?

    编辑

    所以,在查看日志文件后,我似乎发现了一个错误:

    下一个ErrorException:未定义变量:事务(视图:/…/rements.blade.php)/视图/419cdd3906d761bc1bb55581502a15d04c1fe7a7。菲律宾:9

    这似乎是在抱怨 如果 我已经把刀放在刀口上了。php文件:

    @if(($transaction->count($transaction['transactionItem']) == 1) && ($transaction['transactionItem']['currentStatusId'] == '1010'))
    

    我应该如何访问这个 $transaction 叶片内部的变量。php文件?

    0 回复  |  直到 6 年前
    推荐文章