Я хочу сгенерировать PDF файл из представления в laravel 5.1. Я использую https://github.com/barryvdh/laravel-dompdf
Но, Im получает следующую ошибку: Нестатический метод Barryvdh\DomPDF\PDF :: loadView() не следует вызывать статически, предполагая $ this из несовместимого контекста
$pdf = PDF::loadView('invoices.show_invoice', $data);
return $pdf->download('invoice.pdf');
Это происходит из-за того, что вы присваиваете имена неправильному классу PDF. Вы используете namespacing Barryvdh\DomPDF\PDF и пытаетесь использовать этот класс как "Фасад", что неверно. Таким образом, есть два возможных пути решения вашей проблемы:
Установка пространства имен для фасада:
использовать Barryvdh\DomPDF\Facade в формате PDF;
Использование псевдонима (только если вы добавите псевдоним PDF в app.php в разделе псевдонима):
использование PDF;
Refrence: https://github.com/barryvdh/laravel-dompdf/issues/158
Вы, скорее всего, просто забыли добавить ServiceProvider и фасадные строки в config/app.php
:
'Barryvdh\DomPDF\ServiceProvider',
а также
'PDF' => 'Barryvdh\DomPDF\Facade',
После обновления композитора добавьте ServiceProvider в массив поставщиков в config/app.php
"Barryvdh\DomPDF\ServiceProvider", вы можете дополнительно использовать фасад для более короткого кода. Добавьте это к своим фасадам:
'PDF' => 'Barryvdh\DomPDF\Facade',
Вам нужно будет зарегистрировать фасад с помощью Laravel.
В моем случае проблема возникла из-за неправильного пространства имен в классе PDF. Чтобы решить проблему, я установил пространство имен для фасада:
use Barryvdh\DomPDF\Facade as PDF;
в отличие от:
use Barryvdh\DomPDF\PDF;
неправильно установлена функция автозаполнения из моей IDE.
использовать\перед PDF, проблема решена.
$pdf = \PDF::loadView('invoices.show_invoice', $data);
return $pdf->download('invoice.pdf');