【发布时间】:2017-11-14 08:32:25
【问题描述】:
这是我项目的部分结构
root
|-App
|--Controller
|--Common
|-HomeController.php
|-HeaderController.php
|-FooterController.php
|-SidebarController.php
|--Info
|-AboutController.php
|-ContactController.php
为了更好地管理,我将控制器放置在相应的目录中。
我最近为它们添加了命名空间。
HomeController.php = namespace app\controller\common;
HeaderController.php = namespace app\controller\common;
AboutController.php = namespace app\controller\info;
ContactController.php = namespace app\controller\info;
要加载这些控制器,我在下面检查这个自动加载器
spl_autoload_register(function ($class) {
$prefix = 'app\controller\common\\';
$base_dir = __DIR__ . '/app/controller/common/'; // your classes folder
$len = strlen($prefix);
if (strncmp($prefix, $class, $len) !== 0) {
return;
}
$relative_class = substr($class, $len);
$file = $base_dir . str_replace('\\', '/', $relative_class) . '.php';
if (file_exists($file)) {
require $file;
}
});
$home = new app\controller\common\HomeController();
$home->index();
它可以工作,即它会自动加载文件夹 app > controller > common 中的所有控制器。
问题是我不明白如何加载位于不同文件夹(如 Info 文件夹中的那些)和不同子命名空间(命名空间 app\controller\info、命名空间 app\controller\client 的所有其他控制器)的所有其他控制器)?
自动加载的命名空间前缀定义为$prefix = 'app\controller\common\\';,我想这是我需要解决的问题,以适应加载它们的所有其他控制器。
如何修复这个 $prefix?
【问题讨论】:
-
老实说,我建议只使用Composer。它包含您需要的东西以及更多功能,适用于任何平台,易于理解且非常便携。
标签: php namespaces