我有一个Laravel项目在本地工作正常(Mavericks),但psr-4下的类不能加载到我们的舞台服务器(CentOS)上。我找不到反思"没有找到课程"每次我尝试编辑器更新或运行工匠命令时都会出错。
我所有特定于应用程序的类都存储在app / heatherland下的Laravel项目中,例如:
app/heatherland/import/ImportJob.php (file contains HeatherLand\Import\ImportJob)
我的composer.json包含此条目:
"autoload": {
"classmap": [
"app/commands",
...
"app/database/seeds",
],
"psr-4": {
"HeatherLand\\": "app/heatherland"
}
},
在本地,psr-4类被添加到vendor / composer / autoload_classmap.php中的数组中。它们不会添加到舞台服务器上的此文件中。如果我手动剪切并粘贴它们,artisan命令可以正常工作,但下次运行composer命令时,自动加载文件会被覆盖。本地和舞台上的autoload_psr4.php都有以下条目,对我来说很好看:
'HeatherLand\\' => array($baseDir . '/app/heatherland'),
这是我尝试/检查的内容列表:
欢迎任何新的建议。在这一点上,如果我做了些傻话,我会非常高兴。
答案 0 :(得分:9)
这只会导致特定于案例的操作系统出现问题。我的Mac上没有问题,但CentOS拒绝播放。
请注意,这与在其文档中使用特定于Laravel的框架的做法不同,后者使用小写文件夹路径和CamelCase名称空间。这不会导致任何操作系统出现任何问题。 2015年7月ETA:此信息适用于Laravel 4;看起来像Laravel 5的默认文件夹结构符合psr-4标准。
我最终得到了一个文件夹结构,如:
app/heatherland
Import
ImportJob.php
名称空间,例如
HeatherLand\Import
和原始问题的composer.json条目:
"autoload": {
"classmap": [
"app/commands",
...
"app/database/seeds",
],
"psr-4": {
"HeatherLand\\": "app/heatherland"
}
},
自我注意:记得运行composer dump-autoload。提前转储,经常转储。
答案 1 :(得分:1)
名称空间,文件夹和文件名区分大小写。
如果您拥有“ App \ website”,则必须在php文件中调用它。 “ App \ website” 是正确的,但“ App \ Website” strong>是错误的