PHP как сделать autoload из нескольких папок?
Сейчас работает так:
spl_autoload_register(function ($class) {include 'core/' . $class . '.php'; });
$app = new App();
Есть папка core куда я складываю файлы классов. Сейчас их стало много, и хочется разделить на модели, виды, контроллеры
Подскажите как сделать так, чтобы он искал классы из списка папок (массив)?
Ответы (1 шт):
Автор решения: Ivan Dudarev
→ Ссылка
Можно как-то так:
spl_autoload_register(function ($class) {
$baseDir = __DIR__ . DIRECTORY_SEPARATOR . 'core' . DIRECTORY_SEPARATOR;
$file = $baseDir . str_replace('\\', DIRECTORY_SEPARATOR, rtrim($class, '\\')) . '.php';
if (file_exists($file)) {
require_once $file;
}
});
Теперь классы контроллеров можно вынести в директорию core/Controllers и в этих файлах после <?php указать namespase Controllers; (регистр важен)
например, файл core/Controllers/HomeController.php будет выглядеть как-то так:
<?php
namespace Controllers;
class HomeController
{
// тут содержимое
}
Но лучше освоить composer - тогда можно вообще забыть про самописную автозагрузку, про заморочки с подключением сторонних библиотек, про перенос своего кода между проектами и т.д.