Laravel psr-4不能自动加载



我有一个Laravel项目在本地(Mavericks)工作得很好,但是psr-4下的类不能在我们的舞台服务器(CentOS)上加载。每次我尝试作曲家更新或运行工匠命令时,我都会得到反射"类未找到"错误。

我所有的应用程序特定的类都存储在我的Laravel项目app/heatherland下,例如:

app/heatherland/import/ImportJob.php (file contains HeatherLandImportImportJob)

我的作曲家。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'),

这是我尝试过/检查过的东西的列表:

  • 类名、文件夹名、文件名的大小写一致、正确。
  • 我一直在自由地使用composer dump- autolload,有和没有-o选项
  • 我可以用——no-scripts选项运行composer update,但是artisan仍然不会运行
  • 文件夹名称是小写的,,我已经尝试改变它们以反映名称空间的情况(编辑:这从未发生过,至少没有成功)。
  • 我试过从我的命名空间中删除CamelCase(例如,将其更改为Heatherland),并且在我的任何文件夹/文件名中都没有任何下划线。
  • 我运行PHP 5.4.30,和作曲家是最新的。版本在我的本地设置和舞台服务器上是相同的。Laravel 4.1.30。
  • 没有重复的作曲家。

欢迎任何新的建议。在这一点上,如果我做了一些愚蠢的事情,我会非常高兴。

PSR-4确实对大小写非常敏感,比Laravel本身更敏感。完整文件夹路径和名称必须与名称空间相同。只有在composer.json的PSR-4部分中有一个引用的地方,大小写不需要相同。

这只会成为特定于具体案例的操作系统的问题。在我的Mac上没有问题,但是CentOS拒绝播放。

注意,这与特定于larvel的框架在其文档中使用的做法不同,后者使用小写的文件夹路径和CamelCase命名空间。这不会在任何操作系统上造成任何问题。 2015年7月ETA:此信息适用于Laravel 4;看起来Laravel 5的默认文件夹结构遵循psr-4标准。

我最终得到了这样一个文件夹结构:

app/heatherland
  Import
    ImportJob.php

名称空间如

HeatherLandImport

和一个作曲家。根据原始问题的Json条目:

"autoload": {
    "classmap": [
        "app/commands",
        ...
        "app/database/seeds",
    ],
    "psr-4": {
        "HeatherLand\": "app/heatherland"
    }
},

self注意:记得运行composer dump- autolload。早转储,常转储

名称空间、文件夹和文件名区分大小写。

如果你有'Appwebsite',你必须在php文件中调用它'Appwebsite'是正确的,但'Appwebsite'是错误的

相关内容

  • 没有找到相关文章

最新更新