繁体   English   中英

Laravel psr-4 不自动加载

[英]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'),

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

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

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

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM