Вы должны прочитать композитор и загрузить классы самостоятельно для каждого пространства имен, определенного в composer.json
.
Вот как:
function loadPackage($dir)
{
$composer = json_decode(file_get_contents("$dir/composer.json"), 1);
$namespaces = $composer['autoload']['psr-4'];
// Foreach namespace specified in the composer, load the given classes
foreach ($namespaces as $namespace => $classpaths) {
if (!is_array($classpaths)) {
$classpaths = array($classpaths);
}
spl_autoload_register(function ($classname) use ($namespace, $classpaths, $dir) {
// Check if the namespace matches the class we are looking for
if (preg_match("#^".preg_quote($namespace)."#", $classname)) {
// Remove the namespace from the file path since it's psr4
$classname = str_replace($namespace, "", $classname);
$filename = preg_replace("#\\\\#", "/", $classname).".php";
foreach ($classpaths as $classpath) {
$fullpath = $dir."/".$classpath."/$filename";
if (file_exists($fullpath)) {
include_once $fullpath;
}
}
}
});
}
}
loadPackage(__DIR__."/vendor/project");
new CompanyName\PackageName\Test();
Конечно, я не знаю, классы, которые имеют в PackageName. /vendor/project
- где клонирована или загружена ваша внешняя библиотека. Здесь вы найдете файл composer.json
.
Примечание: это работает только для автозагрузки psr4.
EDIT: Добавление поддержки нескольких для одного к классам имен
EDIT2: Я создал Github repo обрабатывать этот код, если кто-то хочет, чтобы улучшить его.
Если у вас есть файл composer.json, вы можете использовать композитор только для поиска пакетов и загрузки их в свой проект. – Katie
Но это не находится в репозитории композитора. Его настраиваемый репозиторий и автоматически загружается с использованием функции автозагрузки композитора. –
Вы можете попробовать автозагрузку напрямую: http://php.net/manual/en/function.autoload.php – Katie