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自动加载准备就绪)。
我有结构目录
自动加载作曲家:
"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自动加载准备就绪)。