[英]Laravel psr-4 not autoloading
我有一个在本地运行良好的 Laravel 项目(Mavericks),但是 psr-4 下的类没有加载到我们的舞台服务器(CentOS)上。 每次尝试 composer update 或运行 artisan 命令时,我都会收到一个反射“找不到类”错误。
我所有特定于应用程序的类都存储在我的 Laravel 项目中的 app/heatherland 下,例如:
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 中的数组中。 它们不会添加到舞台服务器上的此文件中。 如果我手动剪切和粘贴它们,工匠命令可以正常工作,但是下次运行 composer 命令时,自动加载文件将被覆盖。 本地和舞台上的 autoload_psr4.php 都有以下条目,对我来说看起来不错:
'HeatherLand\\' => array($baseDir . '/app/heatherland'),
这是我尝试过/检查过的东西的列表:
欢迎任何新的建议。 在这一点上,如果我做了一些愚蠢的事情,我会很高兴。
PSR-4 确实对大小写非常敏感,比 Laravel 本身更敏感。 完整的文件夹路径和名称必须与命名空间的大小写相同。 案例不需要相同的唯一地方是在 composer.json 的 PSR-4 部分中有引用的地方。
这只会成为特定于案例的操作系统的问题。 我的 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。 尽早转储,经常转储。
命名空间、文件夹和文件名区分大小写。
如果你有 'App\\website' 你必须在 php 文件中调用它'App\\website'是正确的但'App\\Website'是错误的
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.