【发布时间】: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