Psr-4作曲家自动加载自己的类 - 没有找到

时间:2016-06-22 08:31:23

标签: php namespaces composer-php autoload

我有结构目录

enter image description here

autoload composer:

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

我的班级

namespace model;


class ClientAgent
{
    private $pdo;

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

    public function sentAgent()
    {

    }
}

index.php我尝试添加

use model\ClientAgent;但它会抛出错误,找不到类?为什么?

回答后编辑

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

  },

我的index.php

use model\ClientAgent;

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

$clientAgent =new  ClientAgent($pdo);

错误  未捕获的错误:Class' model \ ClientAgent'在C:\ xampp \ htdocs \ Wieloagenty \ index.php中找不到:15

2 个答案:

答案 0 :(得分:0)

"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以使作曲家重新生成其所有缓存文件。

答案 1 :(得分:0)

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

composer.json

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

现在,src文件夹及其下面的每个类都需要在其命名空间中使用此供应商前缀。

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

namespace YourApplication\Model;

class ClientAgent
{

现在,FQCN(完全限定的类名称)为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);

重要!

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

Composer将扫描整个src文件夹,包括类的子文件夹(这样您就可以使用src\models\src\views自动加载的所有课程。