PHP Autoloader добавить путь к пространству имен
Моя структура MVC следующая:
- web
-- Classes
--- Loader.php
-- Core
--- Controller.php
--- Model.php
--- View.php
--- Bootstrap.php
--- DB.php
-- Project
--- Controllers (folder)
--- Models (folder)
--- Views (folder)
Теперь у меня есть пространства имен, указанные для каждого. Например, у меня есть
namespace Classes; //for Loader.php
namespace Core; //For Controller.php, Model.php etc...
namespace Project\Controllers; //For Controllers inside Controllers folder etc...
Мой автозагрузчик выглядит так:
public static function Autoloader2($className) {
$className = explode('\\', $className);
$class = array_pop($className);
$namespace = implode(DIRECTORY_SEPARATOR, $className);
$file = $namespace . DIRECTORY_SEPARATOR . str_replace('_', DIRECTORY_SEPARATOR, $class) . '.php';
require $file;
}
и мой основной index.php использует
spl_autoload_register( array('Loader', 'Autoloader2') );
$app = new Core\Bootstrap();
когда я открываю localhost/web/ я получаю следующую ошибку:
Warning: require(Core/Project/Controllers/Index.php): failed to open stream: N
Кажется, это добавляет Core / к запрашиваемому файлу. Index.php находится внутри проекта / контроллеров, а не ядра / проекта / контроллеров. Если я попытаюсь удалить
//namespace Core; from Bootstrap.php i get the following error
Fatal error: Class 'Core\Bootstrap' not found
Пожалуйста помоги
1 ответ
Решение
Вы должны использовать $app = \Core\Bootstrap();
,
Косая черта перед путем важна, без нее ваши пути в пространстве имен будут относительно друг друга.