【问题标题】:psr-4 autoloading issue in LaravelLaravel 中的 psr-4 自动加载问题
【发布时间】:2021-08-29 00:08:09
【问题描述】:

这个问题可能已经回答过好几次了。我正在尝试通过 Laravel 中的作曲家运行自动加载器。

我在运行composer dump-autoload时遇到此错误

Class App\Admin located in C:/xampp/htdocs/test/app\Models\Admin.php does not comply with psr-4 autoloading standard. Skipping.

我检查了文件系统中的大小写,我觉得没问题。

Composer 版本是 2.0.14,这是最新的。

Composer.json --

"autoload": {
        "psr-4": {
            "App\\": "app/"
        },
        "classmap": [
            "database/seeds",
            "database/factories"
        ]
    },

文件夹结构为:

<root_project>
 app
  Models
   Admin.php
   .....
 config
 public
 ...

app/Models/Admin.php

namespace App;

use ....
use ....

class Admin extends Authenticatable implements HasMedia
{
......

非常感谢任何帮助。

【问题讨论】:

  • 尝试从命名空间 App 更改命名空间;到命名空间 App\Models;
  • @JohnLobo 谢谢。我会尝试。在这种情况下,我将不得不更改所有文件。有没有办法通过composer.json做到这一点。
  • 我使用 phpstorm。我会试试的。

标签: php laravel namespaces autoload psr-4


【解决方案1】:

您的模型中的命名空间错误,您缺少 Model 的子命名空间,并且只有供应商命名空间,在 Laravel 框架中设置为 App,指向 app 文件夹为它的基地。

更改您的 Admin 模型命名空间以包含子命名空间将解决您的问题。

namespace App\Models;

class Admin {}

这是因为 PSR-4 使用文件路径工作,子命名空间是要经过的目录才能到达目标类,并且这些目录必须与子命名空间的大小写匹配。类名也是如此,例如,文件必须与类的文件匹配。

IF你的基目录是/src,链接到供应商命名空间Mitra/src的根文件夹中的一个类将只有命名空间@987654329 @。 如果您在根目录中有一个文件夹; /src/Models THEN 命名空间将是 Mitra\Models

用于 PSR-4 的 specification 是一个相当短的规范,并且有很好的文档记录,如果您在理解上有困难,我建议您阅读它。

【讨论】:

    猜你喜欢
    • 2014-03-24
    • 2018-07-25
    • 1970-01-01
    • 2014-10-19
    • 2014-07-18
    • 1970-01-01
    • 2015-01-08
    • 2014-08-02
    • 2023-03-09
    相关资源
    最近更新 更多