gpt4 book ai didi

Laravel psr-4 不自动加载

转载 作者:行者123 更新时间:2023-12-04 23:00:49 29 4
gpt4 key购买 nike

我有一个在本地运行良好的 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 仍然无法运行
  • 文件夹名称是小写的,我尝试更改它们以反射(reflect)命名空间的大小写(编辑:这从未发生过,至少没有成功)。
  • 我已经尝试从我的命名空间中删除 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 月预计到达时间:此信息适用于 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。 尽早转储,经常转储。

    关于Laravel psr-4 不自动加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25499637/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com