Я обновляюсь с Laravel 7 до 8 и хочу перейти на barryvdh/laravel-dompdf для создания PDF. До сих пор я использовал niklasravnsborg/laravel-pdf, но поскольку этот пакет не поддерживает Laravel 8, мне нужно переключиться. Итак, я занимаюсь изменением существующего кода для использования barryvdh/laravel-dompdf, но у меня возникла проблема.

Это мой (упрощенный) контроллер:

public function update(Request $request) {
    $invoice = Invoice::find($request->invoice_id);
    if(isset($request->export) AND $request->export == 1) {
        $this->exportInvoice($invoice, $request);
    }
}

Эта функция exportInvoice находится в том же файле контроллера.

Я использую это для создания тестового PDF:

$pdf = App::make('dompdf.wrapper');
$pdf->loadHTML('<h1>Test</h1>');
return $pdf->stream();

Теперь мне удалось сузить проблему до того места в моем коде, где происходит сбой генерации PDF.

Если я помещу код создания PDF в оператор if в функции обновления выше, я получу ожидаемый результат: простой файл PDF.

Однако как только я перемещаю этот фрагмент кода в функцию exportInvoice, я получаю простую пустую веб-страницу.

Я искал в Google, но мне не удалось найти похожие проблемы.

Я пробовал объединить весь свой код в функцию update и угадайте, что ... Это работает, как ожидалось. Как будто я что-то не так делаю с подфункциями, но не могу понять, что именно.

Кто-нибудь видит, что я делаю не так?

0
SebDev 9 Мар 2021 в 11:34

1 ответ

Лучший ответ

Из вашего метода update() это вернет PDF-файл обратно в браузер:

return $pdf->stream();

Но из exportInvoice(), вызываемого методом update(), он просто вернет поток обратно в метод update(). Если вы там ничего не сделаете, он не дойдет до браузера. Вам необходимо вернуть ответ, полученный от exportInvoice().

public function update(Request $request) {
    $invoice = Invoice::find($request->invoice_id);
    if(isset($request->export) AND $request->export == 1) {
        // Note we need to *return* the response to the browser
        return $this->exportInvoice($invoice, $request);
    }
}

public function exportInvoice($invoice, $request) {
    $pdf = App::make('dompdf.wrapper');
    $pdf->loadHTML('<h1>Test</h1>');
    return $pdf->stream();
}
0
Don't Panic 9 Мар 2021 в 09:44