Я создаю структуру MVC PHP, и у меня есть некоторые проблемы с автозагрузкой моих классов, которые, я думаю, могут быть связаны с моей файловой структурой.
Во-первых, вот моя файловая структура:
Я тестирую разработку в среде локального сервера Xampp, поэтому у меня есть личные и общие папки. В конце концов, на рабочем сервере личные папки будут находиться в корне сервера, а общие папки будут в каталоге public_html.
Правильно ли выглядит моя файловая структура? в личной папке внешнего интерфейса у меня есть все мои разные модули в каталогах, в которых, в свою очередь, есть файлы контроллера, модели, представления, которые содержат необходимые файлы для каждого модуля.
Я создал этот автозагрузчик до сих пор:
//Require config and router classes
require_once('router.class.php');
require_once('config.php');
spl_autoload_register(null, false);
spl_autoload_extensions('.class.php');
function autoloader_core($class){
$filename = strtolower($class) . '.class.php';
if(!file_exists($filename)){
echo $filename . " not found";
}
include $filename;
}
function autoloader_app($class){
$filename = strtolower($class) . '.class.php';
$file = 'C:\xampp\htdocs\simplebids\simplebidsprivate\app/' . $filename;
if(!file_exists($file)){
echo $file . " not found";
}
include $file;
}
spl_autoload_register('autoloader_core');
spl_autoload_register('autoloader_app');
$router = new test;
$router->say_hello();
Это прекрасно работает для классов в каталоге lib->core, но когда я пытаюсь создать экземпляр нового тестового класса, я получаю всевозможные ошибки о том, что не нашел файл test.class.php в файле lib->core, который он очевидно, что это не так, но я думал, что функция автозагрузчика будет искать путь, определенный мной в функции «autoloader_app».
Забавно то, что хотя я получаю все эти ошибки, строка, которую я повторяю в тестовой функции say_hello(), действительно отображается после ошибок.
Короче говоря, файл не найден в соответствии с ошибками, но это потому, что я вижу эхо, которое я сделал для печати функции классов.
Есть идеи, почему?
Кроме того, файловая структура моего внешнего модуля очень усложнит автозагрузку, так как мне нужна отдельная функция автозагрузки для каждого модуля, а затем для каждого файла контроллера/модели/представления в нем? мне нужна отдельная функция автозагрузки для каждого модуля? Если нет, как бы я поступил?
Спасибо, Том.
.class
в именах ваших файлов, потому что не все загружаемые вами вещи будут классами. - person tereško   schedule 11.04.2014