繁体   English   中英

PSR-4作曲家自动加载自己的课程-找不到

[英]Psr-4 composer autoload own class - no found

我有结构目录

在此处输入图片说明

自动加载作曲家:

"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);

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

"model\\\\": "src/"将为您提供文件夹src/作为model -namespace的基础。 因此,这将为您提供model\\model\\Classname

更改为:

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

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

任何子文件夹将是一个子命名空间。 因此,如果在“模型”文件夹中创建一个文件夹,则名称空间将为: model\\new-foldername\\Classname ,依此类推。

注意:每当您更新composer.json文件时,始终需要运行以下命令: composer dump-autoload以使composer重新生成所有其缓存的文件。

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

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自动加载的所有类)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM