【问题标题】:Slim autoloader & namespace issue超薄自动加载器和命名空间问题
【发布时间】:2020-02-17 19:22:05
【问题描述】:

我认为我的问题很常见,但即使有大量关于命名空间的文档,我也无法弄清楚我的代码有什么问题。

所以我使用 Slim 4.1 并将我的工作文件放在 Custom/ 文件夹中的 app/ 文件夹中。 public/ -- index.php app/ -- Custom/ ---- routes/ ------ manage.route.php -- routes.php src/

我在 compose.json 中添加了这一行。

    "autoload": {
        "psr-4": {
            "App\\": "src/",
            "Custom\\": "app/Custom/" // my custom line
        }
    }

在 routes.php 中,我尝试使用 use 调用我的文件,并且我的文件的命名空间如下:

use Custom\Routes\Manage as Manage;

在我班级的文件中:

namespace Custom\Routes\Manage; 在其顶部;

当我在 routes.php 中点击 new Manage(); 时,我会产生以下错误:

Class 'Custom\Routes\Manage' not found in '[directories]/routes.php'

我很确定当我删除命名空间调用时,composer 会加载文件,因为自动加载的文件数量会发生变化。

也许我没有以正确的方式称呼我的班级,我现在真的不知道。 你能给我指路吗?

提前非常感谢

编辑:

我还用composer dump-autoload -o重新加载了作曲家

Composer 正在添加我的文件夹,所以问题不在于那里,它写在 vendor/composer/autoloader_psr4.php 'Custom\\' => array($baseDir . '/app/Custom')

【问题讨论】:

  • 你的命名空间应该是(我认为)namespace Custom\Routes;,因为我认为它将你的类创建为Custom\Routes\Manage\Manage
  • 我不敢相信我浪费了很多时间来做一些微不足道的事情!我向您致敬,奈杰尔爵士,时间的救星。有用。如果您想要更多的声誉,您可以发布一个正确的答案,我很乐意选择它作为答案。干杯。
  • 有趣的是,我在寻找答案的同时阅读了它,我只是不想看到我猜的。我希望这是一个更大的问题:D 谢谢

标签: php namespaces composer-php slim autoload


【解决方案1】:

正如 Nigel Ren 指出的那样,这只是一个命名空间问题。

您的命名空间应该是(我认为)命名空间 Custom\Routes;因为我认为它将您的课程创建为 Custom\Routes\Manage\Manage"

【讨论】:

    猜你喜欢
    • 2015-06-11
    • 1970-01-01
    • 2013-10-24
    • 2013-06-01
    • 2011-11-19
    • 1970-01-01
    • 2014-06-04
    相关资源
    最近更新 更多