cakephp 2.1.0 Неустранимая ошибка: класс «DOMPDF» не найден

Я следовал этому замечательному руководству

My View/Layouts/pdf/default.ctp

App::import('Vendor', 'dompdf/dompdf.php');
$dompdf = new DOMPDF();
$dompdf->load_html(utf8_decode($content_for_layout), Configure::read('App.encoding'));
$dompdf->render();
echo $dompdf->output();

Мой View/Bids/pfd/view.ctp — это копия моего обычного представления для целей тестирования.

Если я удалю расширение php:

App::import('Vendor', 'dompdf/dompdf');

Я получаю сообщение об ошибке:

An input file is required (i.e. input_file _GET variable).

Пробовал несколько комбинаций require_once, но безуспешно. (Даже пробовал с другой свежей загрузкой dompdf: (из Github, zip называется dompdf-master)

App::import('Vendor', 'dompdf-master/dompdf.php');

и получил ту же ошибку Class not found.

Если я удалю расширение php в этом dompdf-master

App::import('Vendor', 'dompdf-master/dompdf');

получил ошибку:

PHP-font-lib must either be installed via composer or copied to lib/php-font-lib 

Я уверен, что доступ предоставлен, и файлы находятся там, где они должны быть, php 5.3.

Согласно учебнику Марка, это должно быть очень просто.

Вы можете помочь?

Большое спасибо !


person Carlos Garcia    schedule 12.01.2013    source источник
comment
Я предлагаю вам протестировать стандартный PHP include(), чтобы сначала все заработало. Затем начните заменять включения по одному с помощью Cake's App::import. (синтаксис различных методов включения/импорта/и т. д. в Cake может быть неинтуитивным и шатким)   -  person Costa    schedule 12.01.2013
comment
Спасибо @Коста; пробовал include(APP . 'Vendor/dompdf/dompdf.php');' and got error Требуется входной файл (т.е. переменная input_file _GET).'. Пробовал включать каждый файл .php (dompdf_config.inc.php и т. д.) и ту же ошибку. Удаление расширения .php приводит к тому, что класс не найден.   -  person Carlos Garcia    schedule 12.01.2013


Ответы (1)


Правильный файл для загрузки для настройки dompdf — dompdf_config.inc.php. В настоящее время dompdf не соответствует Соглашения о файлах и именах классов CakePHP. Поскольку вы загружаете класс напрямую, а не используете плагин, который использует dompdf, вам придется быть более явным. Глядя на приложение ::import() в книге CakePHP может работать что-то вроде следующего:

App::import($type = 'Vendor', 'DOMPDF', true, array(), 'dompdf_config.inc.php', false);

Конечно, если вы следуете совету в этом ответе, вы должны просто использовать require:

require_once(APP . 'Vendor' . DS . 'dompdf' . DS . 'dompdf_config.inc.php');

Наконец, я рекомендую отказаться от вызова utf8_decode(), если вы используете dompdf 0.6.0. dompdf 0.5.1 не слишком хорошо обрабатывал UTF8, но последняя версия прекрасно справляется с этим, если вы следовали советам в Инструкции по Unicode.

Таким образом, ваш макет должен выглядеть примерно так:

require_once(APP . 'Vendor' . DS . 'dompdf' . DS . 'dompdf_config.inc.php');
$dompdf = new DOMPDF();
$dompdf->load_html($content_for_layout);
$dompdf->render();
echo $dompdf->output();
person BrianS    schedule 12.01.2013
comment
Спасибо #БрайанС. Теперь кажется, что класс загружается. Однако Adobe сообщает об ошибке: файл не начинается с «%PDF-». Local\EWH-jlr[+$y Я использую Adobe Reader X, попытался снять флажок «Отображать PDF в браузере», очистить историю браузера и т. д. Есть идеи, как исправить? (Кроме того, другой генератор pdf (mpdf) отлично работает за пределами cakephp, просто не может интегрироваться в cake, но pdf создается безупречно). Я также читал, что эта ошибка возникает, когда данные публикуются до отображения PDF. Любой намек на это? Я действительно ценю твою помощь. - person Carlos Garcia; 15.01.2013
comment
Спасибо @BrianS. теперь кажется, что он загружается. Однако Adobe сообщает об ошибке: файл не начинается с «%PDF-». Local\EWH-jlr[+$y Я использую Adobe Reader X, попытался снять флажок «Отображать PDF в браузере», очистить историю браузера и т. д. Есть идеи, как исправить? - person Carlos Garcia; 15.01.2013
comment
Только что попробовал этот плагин, который использует dompdf (или Mpdf) github.com/ceeram/CakePdf и все равно получил ошибку : файл не начинается с '%PDF-'. !! Вы можете помочь? - person Carlos Garcia; 15.01.2013
comment
У вас могут быть какие-то ошибки PHP или отладочная информация CakePHP, отправляемая в дополнение к PDF. Убедитесь, что ваш уровень отладки CakePHP установлен на 0, добавив Configure::write('debug',0); в начало макета. - person BrianS; 15.01.2013
comment
К вашему сведению, чтобы увидеть, попадает ли содержимое, отличное от PDF, в вывод, вы можете открыть свой PDF-файл в обычном текстовом редакторе (например, Блокноте или TextEdit). Содержимое, отличное от PDF, обычно находится вверху файла. - person BrianS; 15.01.2013
comment
Теперь это работает! Использован dompdf и макет, предложенный @BrianS. Большое спасибо за советы. Смог увидеть текстовый файл и удалить нежелательный вывод через ob_end_clean(); в качестве последней строки в моем действии контроллера. - person Carlos Garcia; 16.01.2013