如何处理找不到作曲家的班级

时间:2017-04-22 16:40:57

标签: php composer-php

我安装了作曲家和laravel并安装了一些包 一切正常,但现在我在文件夹服务
下创建了自己的类 我给了它这样的服务名称空间:

名称空间服务;

班级名称为UploadToImgurService

我运行composer命令:

 composer dump-autoload

在我的控制器中我写道:

 use Services\UploadToImgurService;

但是我收到了这个错误:

 Class 'Services\UploadToImgurService' not found

我做错了什么? 还有什么我应该用composer来自动加载服务类吗?

修改 我找到了解决方案 我编辑了y composer.json文件并将其添加到psr-4行

     "Services\\" : "app/services"

但为什么之前没有工作呢?这一行:

 "App\\": "app/",

在那里,也许它加载了类但在app命名空间下?

2 个答案:

答案 0 :(得分:2)

如果您使用的是区分大小写的文件系统,则需要使用大写Services的{​​{1}}文件夹。

答案 1 :(得分:0)

你的想法是正确的,但让我试着解释一下psr-4自动加载是如何工作的。

您可以在composer.json文件中定义根命名空间,并将其映射到任何项目目录。在定义的目录中,您的类应该获得根命名空间。根目录下的命名空间段由子目录结构构建,类名等于文件名(PSR-4 Autoloading)。

E.g "MyNamespace\\WithSubNamespace\\": "cool/project"

cool/project/MyClass.php -> MyNamespace\WithSubNamespace\MyClass

cool/project/SubDirectory/AnotherClass.php -> MyNamespace\WithSubNamespace\SubDirectory\AnotherClass

在Laravel中,app目录默认映射到App命名空间。 (可选)您可以使用命令php artisan app:name [NewRootNamespaceName]更改根命名空间,但自动装带器仅在app目录中查找类。 如果在" app"之外创建一个新目录,则必须将该目录添加到composer.json文件中的psr-4名称空间映射。

在您的示例中,您在现有app目录中定义了一个新的根命名空间,因此您的问题是根命名空间未知,您通过在composer.json中添加该行来解决它。 这是可能的,因为psr-4提供了巨大的灵活性。但就个人而言,我不建议在同一个项目中使用不同的根名称空间。

我希望我能提供帮助,也许这对你来说也很有趣:composer.json PSR-4