PSR-4 作曲家自动加载自己的 class - 未找到

Psr-4 composer autoload own class - no found

我有结构目录

自动加载作曲家:

"autoload": {
  "psr-4": {
    "model\": "src/"
  }
},

我的class

namespace model;


class ClientAgent
{
    private $pdo;

    public function __construct(\PDO $pdo)
    {
        $this->pdo = $pdo;
    }

    public function sentAgent()
    {

    }
}

index.php 我试着添加

use model\ClientAgent; 但它抛出错误,未找到 class?为什么?

回答后编辑

     "autoload": {
      "psr-4": {
       "model\": "src/model/"
      }

  },

我的index.php

use model\ClientAgent;

$loader=require_once __DIR__ . '/../vendor/autoload.php';

$clientAgent =new  ClientAgent($pdo);

错误 未捕获错误:在 C:\xampp\htdocs\Wieloagenty\index.php:15

中未找到 Class 'model\ClientAgent'

"model\": "src/" 将为您提供文件夹 src/ 作为 model 命名空间的基础。所以这会给你 model\model\Classname.

改为:

"psr-4": {
    "model\": "src/model/"
}

在 composer 中定义 psr-4 自动加载器时,您将文件夹与特定命名空间相关联。

任何子文件夹都将是一个子命名空间。因此,如果您在 "model" 文件夹中创建一个文件夹,命名空间将是:model\new-foldername\Classname 等等。

注意:每当你更新你的composer.json文件时,你总是需要运行命令:composer dump-autoload让作曲家重新生成所有缓存文件。

我的建议是引入供应商前缀。这可能是您的开发者名称、您的公司名称或应用程序的名称。

composer.json

"autoload": {
  "psr-4": {
   "YourApplication\": "src/"
  }
},

现在,src 文件夹及以下文件夹中的每个 class 的命名空间都需要此供应商前缀。

我们以src\model\ClientAgent.php为例:

namespace YourApplication\Model;

class ClientAgent
{

现在,FQCN(完全限定 class 名称)是 YourApplication\Model\ClientAgent,您可以将其用作 use 语句的一部分。

// first require the Composer autoloader
require_once __DIR__ . '/../vendor/autoload.php';

// declare which other classes you are using
use YourApplication\Model\ClientAgent;

$clientAgent = new ClientAgent($pdo);

重要!

修改(classes 和 composer.json 文件)后,请使用 php composer.phar dumpautoload -o 重新生成 Composer 自动加载器。

Composer 将扫描整个 src 文件夹,包括 classes 的子文件夹(因此您将拥有 src\models\src\views 中的所有 classes自动加载准备就绪)。