当前位置: 首页 > 知识库问答 >
问题:

Laravel psr-4未自动加载

祁星阑
2023-03-14

我有一个在本地运行良好的Laravel项目(Mavericks),但是psr-4下的类没有加载到我们的后台服务器(CentOS)上。每次尝试composer更新或运行artisan命令时,我都会收到一个反射“未找到类”错误。

我的所有特定于应用程序的类都html" target="_blank">存储在我的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。它们未添加到后台服务器上的此文件中。如果我手动剪切并粘贴它们,artisan命令将正常工作,但下次运行composer命令时,自动加载文件将被覆盖。自动加载的psr4。本地和后台的php都有以下条目,我觉得很好:

'HeatherLand\\' => array($baseDir . '/app/heatherland'),

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

  • 类、文件夹和文件名的大小写是一致和正确的
  • 我一直在自由地使用composer dump autoload,无论是否使用-o选项
  • 我可以使用--no scripts选项运行composer update,但artisan仍然不会运行
  • 文件夹名称为小写, 我试图改变它们以反映名称空间的情况 (编辑:这从未发生过,至少没有成功)
  • 我尝试过从我的命名空间中删除CamelCase(例如,将其更改为Heatherland),但我的任何文件夹/文件名中都没有下划线
  • 我正在运行PHP5.4。30,作曲家是最新的。我的本地设置和后台服务器上的版本相同。拉威尔4.1。30.
  • 没有重复的作曲家。两种系统中的phar

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

共有2个答案

罗晨
2023-03-14

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

如果你有“App\website”,你必须在php文件中调用它,“App\website”是正确的,但“App\website”是错误的

荣曾笑
2023-03-14

PSR-4确实对这件事非常敏感,比拉威尔本身更敏感。完整文件夹路径和名称必须与名称空间的大小写相同。案例不需要相同的唯一地方是composer的PSR-4部分中有参考的地方。json。

这只会成为特定于大小写的操作系统的问题。我的Mac没有问题,但是CentOS拒绝玩。

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

我最终得到了一个文件夹结构,如:

app/heatherland
  Import
    ImportJob.php

名称空间

HeatherLand\Import

还有一个作曲家。根据原始问题输入json:

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

自我提醒:记得运行作曲家转储-自动加载。倾倒早,倾倒常。

 类似资料:
  • 1. 概述 本 PSR 是关于由文件路径 自动载入 对应类的相关规范, 本规范是可互操作的,可以作为任一自动载入规范的补充,其中包括 PSR-0,此外, 本 PSR 还包括自动载入的类对应的文件存放路径规范。 关于「能愿动词」的使用 为了避免歧义,文档大量使用了「能愿动词」,对应的解释如下: 必须 (MUST):绝对,严格遵循,请照做,无条件遵守; 一定不可 (MUST NOT):禁令,严令禁止;

  • 我正在使用一些phpunit测试类尝试composer autoload,但我似乎无法让它工作。当我从命令行运行phpunit时,我得到以下错误:“PHP致命错误:Class…notfound”。 我将提供所有的结构和文件信息。我可以,所以希望有人能发现我的错误。 结构(精简为相关文件): composer.json phpunit.xml 测试/功能/基本测试用例。php 测试/功能/主页测试。

  • 我和许多其他人一样,似乎很难弄清楚何时以及如何使用自动加载。我想我理解作曲家和PSR-0/PSR-4的概念和这需要的目录结构。但是如果我用自己的MVC框架构建自己的项目 > 由于composer自带了自动加载器,它将加载我希望包含在项目中的所有依赖项,如果我不打算将我的网站变成分布式项目,我甚至需要自己的名称空间吗?为什么我不坚持使用include/requires? 最后,如果我采用名称空间,使

  • 我刚刚开始使用composer进行依赖关系管理,我很难弄清楚我是如何不遵守psr-4进行自动加载的,所以我来这里寻求建议。我有一个生成随机值的类,它已经在packagist上了。项目结构如下(我已将composer.json文件标记为A和B): 项目总监 composer.jsonA composer.jsonB 最后是RlandValue.php文件,它声明了ejFrancis命名空间 当我运行

  • 我不熟悉使用composer和psr-0。我尝试了一个使用composer和psr-0的小应用程序。我已经使用名称空间加载了一个特定的类。当我使用composer vendor/autoload调用一个类时,我得到了“未找到类”错误。 我的composer.json文件:/var/www/html/silexapp/composer.json 我的作曲家供应商自动加载文件:/var/www/htm

  • 我开始学习Composer,并正在开发一个系统,在该系统中,我将文件与核心应用程序文件分开,如下所示: 所以,要在composer中设置此设置。json文件并访问所有类/App much/Core会这样吗? 还是有更正确的方法? 我也读过PSR-0和PSR-4的比较,我仍然有点怀疑应该使用哪一种。在我的情况下,我应该实现什么,PSR-0还是PSR-4?