【问题标题】:"does not comply with psr-4 autoloading standard." What am i doing wrong in this case?“不符合 psr-4 自动加载标准。”在这种情况下我做错了什么?
【发布时间】:2021-06-11 14:09:44
【问题描述】:

Class Database\Factories\Tasks\UserFactory located in ./database/factories/tasks/UserFactory.php does not comply with psr-4 autoloading standard. Skipping.

这是我的 php 文件:

<?php

namespace Database\Factories\Tasks;

use App\Models\Tasks\User;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;

class UserFactory extends Factory
{
  ...
}

位于:database/factories/tasks/

谁能解释一下为什么这不符合 psr-4 自动加载标准?

【问题讨论】:

    标签: php laravel psr-4


    【解决方案1】:

    PSR-4 自动加载标准区分大小写。因此,如果您的命名空间以大写字母开头,您的文件夹名称也应该这样做。

    在您的示例中,目录应该是 Database/Factories/Tasks。

    【讨论】:

    • 你确定吗?如果我删除 tasks 文件夹,它就可以正常工作,例如,我将命名空间更改为 Database\Factories\UserFactory.php 并且文件夹仍然是小写 database/factories/UserFactory.php (工作正常,没有错误),只有当我添加另一个文件夹时才会发生这种情况factories 文件夹,所以它没有意义。
    • composer.json 中的 PSR-4 配置是什么?看看github.com/composer/composer/blob/master/src/Composer/Autoload/…有对比。根据您的回答,我假设 Database\Factories 直接映射到路径。但是 Task 是额外的文件夹,第一个字母需要大写。
    【解决方案2】:

    将 composer.json 文件中的这一行从 这个

    "autoload": {
        "psr-4": {
            "App\\": "app/",
            "Database\\Factories\\": "Database/Factories/",
            "Database\\Seeders\\": "Database/Seeders/"
        }
    },
    

     "autoload": {
        "psr-4": {
            "App\\": "app/",
            "Database\\Factories\\": "Database/Factories/Task",
            "Database\\Seeders\\": "Database/Seeders/"
        }
    },
    

    【讨论】:

      猜你喜欢
      • 2021-03-09
      • 1970-01-01
      • 1970-01-01
      • 2021-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-17
      • 1970-01-01
      相关资源
      最近更新 更多