我有结构目录
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
答案 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
自动加载的所有课程。