Laravel / Angular - POST 500 (Внутренняя ошибка сервера) при создании PDF - PullRequest
0 голосов
/ 29 октября 2018

У меня есть приложение 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?

...