使用composer autoload找不到的类

时间:2014-03-18 13:23:31

标签: php composer-php slim

我的文件结构为

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

我的vhost指向/ public_html

在app / Index.php中

namespace App;

class Index {}

Composer.json

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

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

第34行:

new \App\Index();

如果重要的话,使用Slimframework也无法想出错误

1 个答案:

答案 0 :(得分:2)

由于您使用的是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类,PHP将打开App\Index文件。