我安装了作曲家和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命名空间下?
答案 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。