作曲家PSR-0自动加载不起作用



我在从应用程序自动加载模块控制器类时遇到问题。我尝试配置composer.json,但仍然无法工作。这个目录结构可能有什么问题。我尝试了作曲家博士的例子,但同样不起作用。。。

目录结构:

|- admin
|----- modules
|--------- Menu
|------------Controller
|--------------MenuController.php

让我们看看composer.json

{
  "autoload": {
    "psr-0": { "Admin\Modules\": "" }
  }
}

我尝试设置路径,但没有再次设置//"Admin\Modules\":"Admin/moduless"

菜单控制器

namespace AdminModulesMenuController;
class MenuController extends AbstractAdminBaseController

前端控制器

require 'vendor/autoload.php';
new AdminModulesMenuControllerMenuController();

找不到所有时间类。我尝试了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

PSR-0永远不会工作,因为这个标准规定文件的路径必须与类名完全相同。请注意,命名空间的第一部分是"Admin",但第一个目录部分只有"Admin"——大小写必须完全匹配,否则它将不起作用(或仅适用于不区分大小写的文件系统)。

不过,您将成功使用PSR-4。为什么?因为使用PSR-4,给定的命名空间前缀将从完整类名中删除,其余的将转换为在给定的目录中搜索命名空间前缀的路径。

案例示例:

"autoload": {
  "psr-0": { "Admin\Modules\": "" }
}

无法工作,因为文件位于路径admin/modules中,但必须位于Admin/Modules中。

"autoload": {
  "psr-4": { "Admin\Modules\": "admin/modules/" }
}

将起作用,因为前缀AdminModules被删除,并且剩余的类名被转换为路径并添加到admin/modules

啊,一个搞定了!这将不起作用,因为您选择将类命名为...Controller...,但将路径再次命名为.../controller/...

老实说,我强烈建议您将文件名和位置转换为PSR-4兼容性,即使是您可以使用Composer处理的前缀目录也是如此。这将消除我看到的令人惊讶的小写目录结构。

我的意思是:如果位于那里的每个类都有Controller,为什么controller目录的大小写一开始就更低?我真的不明白。

相关内容

  • 没有找到相关文章

最新更新