2017-04-22 107 views
1

我安装作曲家和laravel找到并安装一些软件包
所有工作正常,但现在我下的文件夹服务
我给它这样的服务的名称空间中创建我自己的类:如何处理类没有与作曲家

命名空间服务;

和类名是UploadToImgurService

我运行作曲家命令:

composer dump-autoload 

在我控制我写道:

use Services\UploadToImgurService; 

但我得到这个错误:

Class 'Services\UploadToImgurService' not found 

我做错了什么? 还有什么我应该做的作曲家自动加载服务类?

编辑 我找到了解决办法
我编辑ÿcomposer.json文件,并添加到PSR-4线

 "Services\\" : "app/services" 

但为什么它没有前workt?该行:

"App\\": "app/", 

在那里,也许它加载类,但在应用程序名称空间下?

回答

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,应用程序目录被映射到应用程序的名称空间作为默认值。或者,您可以使用命令php artisan app:name [NewRootNamespaceName]更改根名称空间,但自动加载器仅在app目录内查找类。 如果创建“应用程序”之外的新目录,您必须将目录添加到您的PSR-4命名空间映射在composer.json文件。

在你的榜样,您可以定义在现有的应用程序目录中的新根命名空间,所以你的问题是根命名空间是未知的,你通过增加线在composer.json解决它。 这是可能的,因为psr-4提供了巨大的灵活性。但个人而言,我不建议在同一个项目中使用不同的根名称空间。

我希望我能帮上忙,也许这对你也很有趣:composer.json PSR-4

+0

谢谢,现在我终于明白了那件事 –

2

如果您使用的是区分大小写的文件系统,则需要使用Services文件夹,大写字母为S