我的MVC結構如下:PHP自動加載磁帶機添加命名空間路徑
- 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();
當我打開本地主機/網絡/ 我得到以下錯誤:
Warning: require(Core/Project/Controllers/Index.php): failed to open stream: N
它似乎將Core /添加到請求的文件中。 Index.php位於Project/Controllers內部,而不是Core/Project/Controllers。如果我嘗試刪除
//namespace Core; from Bootstrap.php i get the following error
Fatal error: Class 'Core\Bootstrap' not found
請幫
因此,當執行新的Core \ Bootstrap()時,您會得到Index.php需要警告嗎?正確? – dbf
是的,它追加核心/從命名空間這就是爲什麼它沒有找到它,因爲Index.php是在項目/控制器/內,而不是在覈心/項目/控制器 – Giorgi
您是否使用任何「使用」語句 例如使用Core \ Bootstrap;那麼$ app = new Bootstrap(); – gunnx