Использование FPDF с автозагрузкой composer

#php #namespaces #composer-php #fpdf

#php #пространства имен #composer-php #fpdf

Вопрос:

Я могу использовать класс FPDF, если мне требуется нужный файл из моей библиотеки:

 <?php namespace MyNamespace;

require_once '../../../vendor/setasign/fpdf/fpdf.php';
// use FPDF;

$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World!');
$pdf->Output();
  

Примечание: fpdf.php файл не имеет пространства имен.

Composer должен автоматически загружать этот файл для меня. Фрагмент из моего autoload_classmap.php сгенерировано composer:

 // autoload_classmap.php @generated by Composer

$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);

return array(
    'FPDF' => $vendorDir . '/setasign/fpdf/fpdf.php',
    'File_Iterator' => $vendorDir . '/phpunit/php-file-iterator/src/Iterator.php',
  

Другая библиотека, phpunit, загружается нормально.

Как я могу автоматически загрузить библиотеку FPDF с помощью composer и использовать: use FPDF; ?

Комментарии:

1. На случай, если кто-нибудь захочет загрузить FPDF с помощью composer: "require": { "setasign/fpdf": "^1.8" }

2. Хм. autoload_classmap.php должен быть авторитетным источником для библиотек, загружаемых автоматически через сопоставление классов. Единственное, что я бы предложил, это запустить composer dump-autoload . Но я почти уверен, что все, что это делает, это обновляет autoload_classmap.php файл и будет бесполезен (потому что FPDF уже указан там).

Ответ №1:

Я забыл запросить autoload.php файл из vendors папки. Поскольку функция глобальная, мне даже не нужно добавлять use FPDF; .

 <?php namespace MyNamespace;

require_once '../../../vendor/autoload.php';

$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World!');
$pdf->Output();
  

Phpunit работал, потому что доступ к phpunit осуществлялся из командной строки, и я настроил phpunit на включение autoload.php файла.

Я надеюсь, что это поможет и кому-то другому. Немного расстраивает, когда тратишь часы на что-то вроде этого, кажущееся простым.