【问题标题】:Class not found with composer autoload使用作曲家自动加载找不到类
【发布时间】:2014-04-24 05:10:07
【问题描述】:

我的文件结构为

/
/app/
/app/logs/
/app/templates/
/app/index.php
/public_html/
/public_html/.htaccess
/public_html/index.php
/vendor
/vendor/(all vendor here)

我的虚拟主机指向 /public_html

在 app/Index.php 中

namespace App;

class Index {}

作曲家.json

"autoload":
{
    "psr-0":
    {
        "App\\":  "app/"
    }
}

但它仍然显示为 (!) 致命错误:第 34 行的 C:\wamp\www\project\public_html\index.php 中找不到类 'App\Index'

第 34 行:

new \App\Index();

如果这很重要,也使用 Slimframework,想不出有什么问题

【问题讨论】:

  • 似乎 psr-0 失败,将其更改为 psr-4 可以:)

标签: php composer-php slim


【解决方案1】:

由于您使用的是 PSR-0 标准,PHP 一直在寻找不存在的文件 app/App/Index.php。请注意,在 PSR-0 中,您定义了一个基本目录(在您的情况下为app),可以在其中找到映射的命名空间(App)。但是,该基目录中的文件结构应该与完全限定的类名完全匹配。所以类App\FooBar 应该在文件app/App/FooBar.php 中。请注意,app 是基本目录,App 是包含该命名空间的所有子目录和 PHP 文件的目录。

由于在您的应用程序中不是这种情况(也因为 PSR-0 已被弃用),您应该(正如您已经做过的那样)使用新的自动加载标准 PSR-4。在 PSR-4 中,可以直接将某个命名空间映射到某个目录。在您的情况下,您已将 App 命名空间映射到 app 目录,因此如果您需要使用 App\Index 类,PHP 将打开 app/Index.php 文件。

【讨论】:

    猜你喜欢
    • 2018-10-01
    • 2016-03-06
    • 2019-05-16
    • 2014-02-11
    • 2017-01-02
    • 2019-01-31
    • 2017-08-25
    相关资源
    最近更新 更多