Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Psr-4编写器自动加载自己的类-未找到_Php_Namespaces_Composer Php_Autoload - Fatal编程技术网

Php Psr-4编写器自动加载自己的类-未找到

Php Psr-4编写器自动加载自己的类-未找到,php,namespaces,composer-php,autoload,Php,Namespaces,Composer Php,Autoload,我有一个目录结构 自动加载作曲家: "autoload": { "psr-4": { "model\\": "src/" } }, 我的班级 namespace model; class ClientAgent { private $pdo; public function __construct(\PDO $pdo) { $this->pdo = $pdo; } public function sentA

我有一个目录结构

自动加载作曲家:

"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/"
      }

  },
my 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
命名空间的基础。因此,这将为您提供
model\model\Classname

将其更改为:

"psr-4": {
    "model\\": "src/model/"
}
在composer中定义psr-4 autoloader时,将文件夹与特定命名空间相关联

任何子文件夹都将是子命名空间。因此,如果在“model”文件夹中创建一个文件夹,名称空间将是:
model\newfoldername\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 autoloader


Composer将扫描完整的
src
文件夹,包括类的子文件夹(这样您将拥有
src\models\
src\views
自动加载准备中的所有类)。

更改Composer.json后是否运行:
Composer dump autoload
?如果没有,您需要这样做,以便composer重新生成它的自动加载文件。@Pablos-不确定您是否收到关于我的评论的任何通知(忘记引用您)。:)