我的应用程序中的自动加载模块控制器类有问题。我尝试配置composer.json但仍然无法正常工作。可能我正在做这个目录结构的错误。我尝试了作曲家doc的例子,但又一次不工作......
目录结构:
|- admin
|----- modules
|--------- Menu
|------------Controller
|--------------MenuController.php
让我们看看 composer.json
{
"autoload": {
"psr-0": { "Admin\\Modules\\": "" }
}
}
我尝试设置路径,但没有再次设置//" Admin \ Modules \":" admin / modules"
菜单控制器:
namespace Admin\Modules\Menu\Controller;
class MenuController extends AbstractAdminBaseController
FrontController
require 'vendor/autoload.php';
new \Admin\Modules\Menu\Controller\MenuController();
所有时间都没找到。我尝试了谷歌的100个例子,没有。如何减缓这个问题的任何例子?感谢
更新结构:
├───admin
│ └───modules
│ └───Menu
│ └───controller
│ └───MenuController.php
├───vednor
│ └───autoload.php
│ └───composer
│ └───autoload_classmap.php
│ └───autoload_namespaces.php
│ └───autoload_psr4.php
│ └───autoload_real.php
│ └───ClassLoader.php
├───public
├───assets
├───index.php
├───composer.json
├───composer.lock
答案 0 :(得分:1)
你的PSR-0永远不会工作,因为这个标准规定文件的路径必须与类名完全一样。请注意,命名空间的第一部分是" Admin",但第一个目录部分只是" admin" - 案例必须完全匹配,否则它将无法正常工作(或仅适用于不区分大小写的文件系统)。
但是,您将成功使用PSR-4。为什么?因为使用PSR-4,将从完整的类名中删除给定的名称空间前缀,其余的将被转换为在为名称空间前缀指定的目录中搜索的路径。
您的案例示例:
"autoload": {
"psr-0": { "Admin\\Modules\\": "" }
}
无效,因为文件位于路径admin/modules
中,但必须位于Admin/Modules
。
"autoload": {
"psr-4": { "Admin\\Modules\\": "admin/modules/" }
}
将起作用,因为前缀Admin\Modules\
已被删除,剩余的类名将转换为路径并添加到admin/modules
。
...\Controller\...
命名,但路径再次.../controller/...
。
老实说,我强烈建议您将文件名和位置转换为PSR-4兼容性,即使对于您可以使用Composer解决的前缀目录也是如此。这将消除我看到的令人惊讶的小写目录结构。
我的意思是:如果位于那里的每个班级都是controller
,为什么Controller
目录首先是小写?我真的无法理解这一点。