gpt4 book ai didi

php - Composer 的自动加载器找不到应用类。为什么?

转载 作者:行者123 更新时间:2023-12-03 19:07:52 26 4
gpt4 key购买 nike

我有以下文件结构:

src/Models/Entity.php 
vendor/*
index.php
composer.*

Entity.php 包含

<?php
namespace Vendor\App\Models;

class Entity {}

index.php 包含

<?php
namespace Vendor\App;

require 'vendor/autoload.php';

use Vendor\App\Models\Entity;

$entity = new Entity();

composer.json 包含:

{
"autoload": {
"psr-0": {"Vendor\\App\\": "src/"}
}
}

vendor/composer/autoload_namespaces.php 包含

<?php

// autoload_namespaces.php generated by Composer

$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);

return array(
'Vendor\\App\\' => $baseDir . '/src/',
);

我得到 127.0.0.1:37409 [500]:/- Class 'Vendor\App\Models\Entity' not found in ...

错误在哪里? composer.json 中的复杂 namespace 和/或源代码目录是什么格式?

已更新:我找到了解决方法(将 src/Models 移至 src/Vendor/App/Models),但这是正常行为吗?

最佳答案

Composer/PSR-0 的自动加载约定非常困惑。每次创建新的 Packagist 项目时,我都必须查找它。

当您创建一个 composer.json 文件并设置自动加载信息时,如下所示:

{
"autoload": {
"psr-0": { "Vendor\\App\\": "src/" }
}
}

你说的是“在 project_root/src 中可以找到一个“Vendor\App”命名空间。令人困惑的部分是你分配给该文件夹的每个嵌套命名空间(在这种情况下,'src') 期望由其中的另一个嵌套文件夹表示。

这就是为什么您需要将您的类放在 project_root/src/Vendor/App 中才能被此自动加载方案找到。

旁注:如果您碰巧在类名中使用任何下划线,这也可能导致其工作方式出现问题,因为下划线还暗示嵌套文件夹(即 App\Models\Type\Entity,指向src/App/Models/Type/Entity.php,与App/Models/Type_Entity.php的查看方式相同).所以要小心下划线!

关于php - Composer 的自动加载器找不到应用类。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15464880/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com