#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
файла.
Я надеюсь, что это поможет и кому-то другому. Немного расстраивает, когда тратишь часы на что-то вроде этого, кажущееся простым.