2015-05-31 4 views
0

Я просто создавал один из своих первых пакетов PHP, используя Composer, и я попал в проблему.Пакет композитора: AutoLoad и расширение другого пакета

В настоящее время я работаю на пакете, что его главный класс расширяет класс из другого пакета, поэтому на моем composer.json Я пакет я EXTENDING объявленный как требование:

"require": { 
     "php": ">=5.3.0", 
     "ext-mbstring": "*", 
     "author/BasePackage": "dev-master" 
}, 

И, Если я выдаю composer update, я получаю хороший каталог vendor внутри моего проекта с загруженной зависимостью author/BasePackage.

Так что мой вопрос, на мой основной файл класса src\Extended.php мне нужно вручную делать что-то вроде require_once __DIR__ . "/../vendor/autoload.php";, чтобы автозагрузку BasePackage так что я могу сделать class Extended extends \BasePackage\BasePackage.

Это нормально? Как я должен загружать зависимости пакета? Когда я передаю этот пакет GitHub или так, я игнорирую каталог vendor, и если кто-то использует его, требуя его для своих проектов, то require_once __DIR__ . "/../vendor/autoload.php"; потерпит неудачу, потому что он не будет там, где я ожидал.

Как мне это сделать?

спасибо.

ответ

4

Нет, это не нормально.

Вы можете смело предположить, что любой, кто использует ваш пакет, использует Composer. И он будет использовать автозагрузчик Composer. Таким образом, он может загружать как собственный класс из пакета, так и любой другой класс, от которого зависит ваш пакет, при условии, что вы указали его как зависимость в своем пакете.

Не вручную загружать другие классы! Вам не обязательно.

Ваши тесты в вашем пакете должны включать vendor/autoload.php в начальной загрузке - это позволит вашему классу напрямую использоваться, поскольку другие классы пакетов также могут быть автоматически загружены. Любые примеры скриптов также должны включать созданный автозагрузчик.

Если ваш пакет используется где-то в другом месте, этот автозагрузчик будет действовать одинаково: все классы, которые Composer удается загрузить, которые имеют правильное объявление автозагрузки, могут быть непосредственно использованы после включения автозагрузчика.

Смежные вопросы