Как spl_autoload_register Несколько каталогов для одновременного пространства именPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Как spl_autoload_register Несколько каталогов для одновременного пространства имен

Сообщение Anonymous »

У меня есть существующая автозагрузка, которая проходит через файл json для автозагрузки различных сторонних файлов, это работает очень хорошо. Однако в проект добавляются новые файлы, и они находятся в разных каталогах, но используют одно и то же пространство имен. Проблема заключается в том, что, кажется, только загрузит последний каталог для одного и того же пространства имен, поэтому, когда он идет, чтобы загрузить файл, он не может его найти.

Код: Выделить всё

spl_autoload_register(function (string $class_name): void {
// Get mappings from json
$conductor = file_get_contents(__DIR__.'/autoload.json');
$conductor = str_replace('\\', '\\\\', $conductor);
$configuration = json_decode(stripslashes($conductor), true);

// Map the namespace to the corresponding folder
$namespace_mapping = $configuration['autoload']['psr-4'];

foreach ($namespace_mapping as $namespace => $directory) {
if (
strpos($class_name, $namespace = trim($namespace, '\\')) !== 0
|| (!$directory = realpath(__DIR__ . DIRECTORY_SEPARATOR . trim($directory, DIRECTORY_SEPARATOR)))
) {
continue; // Class name doesn't match or the directory doesn't exist
}

// Require the file
$class_file = $directory . str_replace([$namespace, '\\'], ['', DIRECTORY_SEPARATOR], $class_name) . '.php';
if (file_exists($class_file)) {
require_once $class_file;
}
}
});
< /code>
текущий json < /p>
{
"autoload": {
"psr-4": {
"Psr\\Log\\": "psr/log/src/",
"Psr\\Http\\Server\\": "psr/http-server-handler/src/",
"Psr\\Http\\Server\\": "psr/http-server-middleware/src/",
"Psr\\Http\\Message\\": "psr/http-message/src/",
"Psr\\Http\\Message\\": "psr/http-factory/src/",
"Psr\\Container\\": "psr/container/src/"
}
}
}

< /code>
Я думал, что нужно сделать что -то подобное в JSON: < /p>
"Psr\\Http\\Server\\": ["psr/http-server-handler/src/", "psr/http-server-middleware/src/"],
Любая помощь будет высоко оценена.

Подробнее здесь: https://stackoverflow.com/questions/795 ... -namespace
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»